Почему отображается сообщение об ошибке при открытии файла .xls - PullRequest
10 голосов
/ 21 марта 2012

В моем приложении asp.net, C # мы генерируем и скачиваем файл .xls.Но когда я пытаюсь открыть, он выдает сообщение

"Файл, который вы пытаетесь открыть," filename.xls ", имеет другой формат, чем указано в расширении файла. Проверьтечто файл не поврежден и находится из надежного источника перед открытием файла. Хотите открыть файл сейчас? "

Если я нажимаю" Да ", он открывается.Я изменил расширение файла на .xlsx, все то же сообщение.Может кто-нибудь сказать мне, почему это происходит?Я добавил расширение .xlsx MIME-типа в диспетчере IIS с MIME-типом как application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.Тем не менее он показывает то же сообщение.Подскажите, пожалуйста, как мне от этого избавиться.

Ответы [ 6 ]

3 голосов
/ 11 января 2013

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

В статье Microsoft КБ 948615 объясняется это:

Когда вы открываете файл в Excel 2007, вы получаетепредупреждение о том, что формат файла отличается от формата, который указывает расширение имени файла.

Единственное решение - добавить запись en в реестр клиента.Я знаю, что это не настоящее решение для веб-приложения, возможно, с сотнями пользователей, но, по крайней мере, вы можете добавить заметку на страницу, рассказывающую, как исправить это раздражающее предупреждение.

2 голосов
/ 21 марта 2012

Вы полностью создаете файл xls или копируете и заполняете файл шаблона xls?Неправильный формат файла шаблона может вызвать проблему.

Кроме того, какой поставщик вы используете для заполнения вашего файла?- Microsoft.ACE.OLEDB.12.0 для xlsx / xlsm?- Microsoft.Jet.OLEDB.4.0 для xls?

Неправильная комбинация провайдер / расширение может вызвать проблему.

Согласно вашему комментарию, здесь есть часть кода, где я это сделалв прошлом: (прокомментировал некоторые строки, поскольку я не помню, почему они были полезны)

Response.Clear();                           
Response.ContentType = "application/vnd.ms-excel";
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ",
    String.Format(@"attachment; filename={0}",myfileName));

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush();
Response.Close();
1 голос
/ 01 июля 2013

Предупреждение - это новая функция безопасности в Excel 2007, которая называется Extension Hardening, которая гарантирует, что открываемое содержимое файла соответствует типу расширения, указанному в команде оболочки, которая пытается открыть файл.Текущий дизайн не позволяет открывать HTML-контент с веб-сайта в Excel, если расширение URL не является .HTM / .HTML / .MHT / .MHTML.Таким образом, ASP-страницы, которые возвращают HTML и устанавливают тип MIME на что-то вроде XLS, чтобы заставить HTML открываться в Excel вместо веб-браузера (как и ожидалось), всегда будут получать предупреждение безопасности, поскольку содержимое не соответствует типу MIME.

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

1 голос
/ 21 марта 2012

Не уверен, как вы экспортируете данные в Excel.Установка DisplayAlerts в false может помочь.

xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;

Я использую Interop DLL.Пространство имен будет Microsoft.Office.Interop.Excel.См. Ответ Фенга Чена в следующей ссылке о том, как добавить ссылку: http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

Следующая ссылка также может помочь:

http://www.dotnetperls.com/excel

0 голосов
/ 12 октября 2017

Расширение файла .xls (версия 2003) поддерживает макет HTML, тогда как версии Office 2007 и выше не поддерживают его.

Вы должны экспортировать файл Excel в формат .xlsx . По моему опыту он будет поддерживать его во всех версиях.

Добавить ниже DLL в папку bin

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

Код для экспорта файла в .xlsx

    DataTable dt = new DataTable(); 
    //Create column and inser rows
    using (XLWorkbook wb = new XLWorkbook())
    {           
                var ws = wb.Worksheets.Add(dt, Sheetname); 
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
     }
0 голосов
/ 21 марта 2012

Вы используете .xls в имени файла и .xlsx в типе MIME. Попробуйте с помощью filname.xlsx.

...