Я использую ASP MVC3 framework, создал файл Excel и вывел его с помощью действия FileResult с типом содержимого " application / vnd.openxmlformats-officedocument.spreadsheetml.sheet ".
При попыткечтобы открыть его, Excel просто говорит: « файл поврежден и не может быть открыт .»
Когда я открываю исходный файл Excel, который использовался для отправки вывода, он работает без проблем.Я также запускаю сравнение файлов в байтах для обеих копий, и файлы идентичны.Я попытался отправить поврежденный файл по электронной почте, и вложение открылось нормально.
Это наводит меня на мысль, что это проблема с заголовками или какой-то конфигурацией безопасности Excel / Windows.
Если это такпоследнее, тогда мне нужно решение, которое не заставит клиентов изменять свои настройки безопасности.
РЕДАКТИРОВАТЬ - нашел параметр:
Я нашел причины этого параметраэто - « Включить защищенный просмотр из файлов, созданных из Интернета » в настройках Excel Trust Center / Protected View .
Так что я думаю, вопрос - Есть ли способ, чтобы файл выглядел как доверенный?
Вот заголовки ответа:
- Cache-Control: private
- Content-Disposition: attachment;
- filename = "Report - Monday, March 19, 2012.xlsx" Content-Length: 20569
- Content-Type: application / vnd.openxmlformats-officedocument.spreadsheetml.sheet
Метод действия, которыйполучает вывод:
[HttpPost]
public virtual FileResult Export()
{
try
{
...
string newFilePath = createNewFile(...);
string downloadedFileName = "Report - " + DateTime.Now.ToString("D") + ".xlsx";
return File(newFilePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", downloadedFileName);
}
catch (Exception ex)
{
...
}
}
Как создать файл Excel:
У меня есть шаблон XLSX с именами столбцов ведьм и некоторыми сводными диаграммами в другихлисты.Из C # я создаю копию этого шаблона и затем вызываю SQL Server, который выводит данные на 1-й лист, используя соединитель OLEDB:
set @SQL='insert into OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=' + @PreparedXLSXFilePath + ';'', ''SELECT * FROM [Data$]'') ...
Заранее благодарен за любую помощь.