Как предотвратить зависание Excel 2003 после открытия электронной таблицы в IE?
-
03-07-2019 - |
Вопрос
У меня есть веб-приложение, которое предоставляет файлы Excel через IE 7.Он запрашивает файлы с помощью HTTP GET по URL-адресу, который возвращает данные с типом контента «application/vnd.ms-excel».Затем он открывает электронные таблицы в IFrame.
Все это работает нормально, если только Excel не открыт при загрузке электронной таблицы.В этом случае он по-прежнему отображается правильно, но повторно использует открытый экземпляр Excel.Когда IFrame закрыт, Excel зависает.Excel становится разблокированным только в том случае, если пользователь выходит из веб-приложения или загружает файл другого типа.
Я попытался включить настройку «Игнорировать другие приложения» в разделе «Инструменты» | Варианты | Общие, но это не решило проблему.
Я также попробовал выполнить шаги, описанные в этот ответ (как связанная ссылка говорит: «Эта проблема решена в Excel 2007 beta 2.»), но безуспешно.
Есть ли какой-то шаг «утилизации», который я сейчас не делаю, чтобы предотвратить зависание Excel?
Версии:
Excel 2003 (11.8220.8221) SP3
IE 7.0.5730.11 (версии обновления:0)
Решение 2
Дальше к Ответ Роберта, следующая строка кода (Java) устраняет эту проблему, предотвращая зависание Excel:
response.setHeader("Content-Disposition",
"attachment; filename=\"" + filename + "\"");
[NB «ответ» — это HttpServletResponse]
Однако при этом таблица загружается в окно Excel, а не отображается в IFrame...
Обновлять: Сброс URL-адреса IFrame на пустое значение приводит к удалению экземпляра Excel и устраняет эту проблему (без необходимости Content-Disposition
изменять).
Другие советы
Не уверен, что это поможет, но...
У меня была похожая проблема (генерация CSV-контента на лету) давно, и все, что я помню, это то, что нужно было что-то делать с вызовом правильных методов ответа.Код был примерно такой
Response.Clear();
Response.Buffer = true;
Response.AppendHeader("Content-Disposition", "attachment; filename=export.csv");
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetLastModified(DateTime.Now);
Response.Cache.SetMaxAge(new TimeSpan(1));
Response.ContentType = "text/csv";
Response.ContentEncoding = System.Text.Encoding.Unicode;
...
//Some writing to the Response.OutputStream
...
Response.Flush();
//I am not sure about the following line:
Response.End();
К сожалению, это совершенно не в вашей власти.Это действительно зависит от того, какая у них версия Excel и какие обновления были применены.
Удалось ли вам воспроизвести эту проблему в своей среде?Если нет, возможно, проблема на клиентском компьютере.Есть ли способ узнать, какие опции были установлены, а какие нет, и поддерживается ли Excel с помощью исправлений?
Мне кажется, сам офис надо переустанавливать, а то и IE 7 после этого.
Я бы также рассмотрел любые проблемы с закрытием iFrame.Чтобы проверить эту теорию, вы можете опубликовать iframe на новой странице (без iframe), а затем дать ссылку на страницу с iframe и файлом Excel?Я понимаю, что это, вероятно, не будет для вас рабочим решением, но оно должно помочь вам определить, есть ли ошибка в Excel, IE7 или коде iframe.
Можете ли вы это воспроизвести или вам об этом сообщил клиент, и вы пытаетесь это выследить?
Предоставленная вами ссылка касается нескольких мониторов. У меня также есть несколько мониторов, когда я подключаю свой ноутбук, и я обнаружил, что ряд приложений не реагируют должным образом.Например, если приложение попытается открыть модальное диалоговое окно в пространстве рабочего стола, которого больше не существует (например, на моем «втором мониторе» после того, как я отстыковал свой ноутбук), оно заблокирует приложение, поскольку я могу Доберёмся до коробки.Может быть, это то, что здесь происходит?
Другая потенциальная проблема возникает, если вы запрашиваете у пользователя какую-либо аутентификацию при получении файла Excel.На нашем сайте SharePoint Excel требует, чтобы пользователь прошел аутентификацию, и если это модальное диалоговое окно аутентификации каким-то образом перейдет на задний план, вернуться на передний план может быть невозможно.Единственный способ — завершить процесс или закрыть браузер SharePoint, поскольку это в первую очередь прекращает запрос файла.
Надеюсь, это поможет, и если что-то из этого даст вам еще какие-то подсказки, опубликуйте их здесь, и мы решим проблему.