Почему отображается сообщение об ошибке при открытии файла.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
Следующая ссылка может также помочь:
Предупреждение - это новая функция безопасности в 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.