Почему отображается сообщение об ошибке при открытии файла.xls

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

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

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

6 ответов

Решение

Вы полностью создаете файл 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();

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

Статья 948615 базы знаний Майкрософт объясняет это:

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

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

Расширение файла.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();
                }
     }

Не уверен, как вы экспортируете данные в 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

Предупреждение - это новая функция безопасности в 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

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

Другие вопросы по тегам