Excel не хочет открывать файлы XLSX, загруженные через выход ASP - PullRequest
2 голосов
/ 20 марта 2012

Я использую 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$]'')  ...

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 20 марта 2012

Вам понадобится цифровая подпись в вашем файле Excel.Как это сделать из кода - другой вопрос.

Больше информации здесь:

http://www.delphifaq.com/faq/windows_user/f2751.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...