Как избавиться от ошибки при открытии xls файла

Dika!

выгружаю из GridView таблицу в Excel.
Response.Clear();
 Response.AddHeader("content-disposition", "attachment; filename=Act_Osnovnoy" + sd + ".xls");
 Response.Charset = "UTF-8";


 Response.ContentType = "application/ms-excel";
 System.IO.StringWriter stringWrite = new System.IO.StringWriter();
 HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
 // Create a form to contain the grid
 HtmlForm frm = new HtmlForm();
 GridView1.Parent.Controls.Add(frm);
 frm.Attributes["runat"] = "server";
 frm.Controls.Add(GridView1);

 frm.RenderControl(htmlWrite);

 
 string dv = "Акт первичного учета ЭЭ по основной территории за " + sd;
 Response.Write(dv);
 Response.Write(stringWrite.ToString());
 Response.End();
создается экселевский файл, который при открытии выдает ошибку: Действительный формат открываемого файла отличается от его указываемого расширением имени файла. и т.д., файл открывается, но, хотелось бы убрать сообщение. Если выгружать в Word, то ошибок нет. На машине установлен MS Office 2007. В Excel 2003 файл открывается без предупреждений.
11 ответов

Dika!

1. хм.. правильную ошибку выдает - если назвать html excel-ем, то он таким не станет, имхо2. ну раз уж пошла такая пьянка, то попробуй вот так3. все же рекомендую сделать по умному блог обо всем что посчитал полезным


Dika!

подобная ошибка возникает когда делаю так:
Application xlApp = new Application(); //http://qaskill.com/c-rabota-s-excel.html
 Workbook xlWorkBook;
 Worksheet xlWorkSheet;
 object misValue = System.Reflection.Missing.Value;
 xlWorkBook = xlApp.Workbooks.Add(misValue);//Добавить новый book в файл 
 //Открытие первой вкладки
 xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1);
 //шапка
 xlWorkSheet.Cells[1, 1] = "Фамилия";
 xlWorkSheet.Cells[1, 2] = "Имя";
...
 Guid g;
 g = Guid.NewGuid();
 string filePath = Server.MapPath("~/Template"+g.ToString()+".xls");
 xlWorkBook.SaveAs(filePath); 
 try
 {
 xlWorkBook.Close(null, null, null);
 xlApp.Quit();
 }
 finally
 {
 xlWorkSheet = null;
 xlWorkBook = null;
 xlApp = null;
 }
 Byte[] bytearray = FileToByteArray(filePath);

 File.Delete(filePath);

 Response.Clear();
 Response.ContentType = "application/vnd.ms-excel";
 Response.AddHeader("Content-Disposition", "attachment; filename=ExcelFile.xls");
 Response.AddHeader("Content-Length", bytearray.Length.ToString());
 Response.BinaryWrite(bytearray);
если делать
Response.ContentType = "application/ms-excel";
ошибка таже


Dika!

а если попробовать ContentType xml? и/ли filename .xlsx?помню - у нас было, чем закончилось , не помню :)


Dika!

Zoria,попробовал и то и другоевсе равно ошибка


Dika!

Решении проблемы:
Response.ContentType = "Application/msexcel";


Dika!

Решении проблемы:
Response.ContentType = "Application/msexcel";
как всегда "а ларчик просто открывался" .спасибо за публикацию :)


Dika!

Всем здравствуйте. Сталкнулся с такой же проблемой, поэтому оживляю тему.Response.ContentType = "Application/msexcel" не помог. Все равно открывается с ошибкой.Есть еще варианты, кроме правки реестра? 2003-й эксель все открывает без проблем, ошибка только при открытии 2007-м и 2010-м экселем.При попытке сохранения в xlsx вообще не открывается потом файл с ошибкой: "Не удается открыть файл, так как формат или расширение этого файла являются недопустимыми." Переименовываю его в xls - открывается, но с такой же ошибкой. Можно все-таки что-то дописать в хидер, чтобы офис открывал его без ошибки? Или оставить эту затею и сделать с помощью OpenXML?


Dika!

Код в студию.


Dika!

Это когда пробую сохранять в xlsx(получается нечитабельный файл для 2007-го экселя):protected void imgB_SaveInXls_Click(object sender, ImageClickEventArgs e){ Response.Clear(); Response.Charset = "UTF-8"; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", "filename=" + "Report_" + DateTime.Today.ToShortDateString() + ".xlsx"); StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); gv_.AllowPaging = false; gv_.AllowSorting = false; sqlDS_.SelectCommand = GetSelect(); gv_.DataBind(); gv_.Caption = "отчет; PrepareGridViewForExcel(gv_); gv_.RenderControl(hw); Response.Write(sw.ToString()); Response.End(); gv_.Caption = "";}Это когда пробую сохранять в xls(открывается с ошибкой в 2007-го экселе, без ошибки в 2003-м):protected void imgB_SaveInXls_Click(object sender, ImageClickEventArgs e){ Response.Clear(); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "filename=" + "Report_" + DateTime.Today.ToShortDateString() + ".xls"); StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); gv_.AllowPaging = false; gv_.AllowSorting = false; sqlDS_.SelectCommand = GetSelect(); gv_.DataBind(); gv_.Caption = "отчет; PrepareGridViewForExcel(gv_); gv_.RenderControl(hw); Response.Write(sw.ToString()); Response.End(); gv_.Caption = "";}


Dika!

Я просил код, а не ошметки какого-то мусора. Мне это нужно скомпилировать силой мысли?


Dika!

...Мне это нужно скомпилировать силой мысли?
Особенно, если ни силы, ни мысли... .