Возврат MVC3 Действие файла вызывает прерывистую ошибку программы Excel

У меня есть проблема, которая тесно связана с этой проблемой -program">Ошибка Microsoft Excel: возникла проблема с отправкой команды в программу. из-за чего при открытии Excel возникает ошибка There was an error sending a command to the program.

Однако вместо того, чтобы файл существовал и открывался или вызывался ярлыком, я использую MVC3 с действием, которое генерирует набор данных, создает файл excel (используя NPOI), записывает его в MemoryStream, а затем отправляет в браузер с помощью встроенного return File(etc) ActionResult с что-то похожее (но сокращенное здесь для удобства чтения) на это:

return File(myMemoryStream, "application/vnd.ms-excel", "filename.xls");

Первый раз, когда вы щелкаете ссылку, которая запускает это действие и возвращает этот файл, возникает ошибка. если вы нажмете ок и попробуете еще раз, это сработает и будет продолжать работать ... навсегда

Теперь я знаю, что это потенциально связано с отключением DDE/плагинов или чем-то еще в Excel, но поскольку я создаю книгу Excel и выгружаю ее в поток памяти, а не открываю что-то существующее постоянно находится в файловой системе, я не уверен, какие у меня есть варианты, чтобы устранить проблему.

Любые предложения о том, как обойти это? Возможно, у меня неправильный мим-тип?


person SpaceBison    schedule 15.06.2011    source источник
comment
У меня тоже такая проблема... есть решения?   -  person BlueChippy    schedule 27.06.2011
comment
Для информации: я переключился на EPPlus для создания файла Excel... он работает очень хорошо, хотя и кажется немного медленнее. Однако стоит попробовать сбросить позицию Stream на 0.   -  person BlueChippy    schedule 28.06.2011
comment
Я сбрасываю позицию потока на 0 по привычке - в данном случае не уверен, что это действительно имеет большое значение. Обнаружил, что это только на определенных машинах с новыми (2007+) версиями Excel. Вполне может быть, что NPOI полностью поддерживается только форматом 97-2003.   -  person SpaceBison    schedule 28.06.2011
comment
У меня такая же проблема. Похоже, это связано с Excel, потому что это происходит, когда я также загружаю электронные таблицы с других сайтов (не обязательно на основе ASP .NET).   -  person Azargoth    schedule 30.06.2011


Ответы (1)


Приложение Content-Type/vnd.ms-excel отправляет команду в браузер, чтобы открыть файл в браузере. Что может быть причиной проблемы. Попробуйте установить тип содержимого application/x-msexcel.

В вашем примере браузер попытается открыть электронную таблицу Excel в браузере (если у пользователя установлен Excel).

return File(myMemoryStream, "application/vnd.ms-excel", "filename.xls")

Внесите следующие изменения

return File(myMemoryStream, "application/x-ms-excel", "filename.xls")
person Amit Bagga    schedule 03.07.2011
comment
Спасибо за этот вариант - буду пробовать. - person SpaceBison; 04.07.2011
comment
Я принял этот ответ как наиболее вероятный обходной путь при отсутствии каких-либо других ответов :) - person SpaceBison; 01.09.2011