Мне нужно экспортировать gridView в Excel, я помещаю HTML-код возврата из gridview в HtmlTextWriter и помещаю его в ответ.
Файл результатов работает отлично в Excel, Excel может анализировать HTMLи результат читабелен, отлично работает в Excel 2003 и 2007, но на некоторых машинах с Excel 2008 (MACOS) Excel показывает только необработанный HTML-код и не может обработать этот HTML-код.
Любая идея для настройкиExcel?
Это код для преобразования:
public static void ToExcel(GridView gridView, string fileName)
{
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.Buffer = true;
fileName = fileName.Replace(".xls", string.Empty) + ".xls";
response.AddHeader("content-disposition",
"attachment;filename=" + fileName);
response.Charset = "";
response.ContentEncoding = Encoding.Unicode;
response.BinaryWrite(Encoding.Unicode.GetPreamble());
response.ContentType = MimeTypes.GetContentType(fileName);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
gridView.AllowPaging = false;
//gridView.DataBind();
//Change the Header Row back to white color
gridView.HeaderRow.Style.Add("background-color", "#FFFFFF");
//Apply style to Individual Cells
for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
{
gridView.HeaderRow.Cells[i].Style.Add("background-color", "yellow");
}
for (int i = 0; i < gridView.Rows.Count; i++)
{
GridViewRow row = gridView.Rows[i];
//Change Color back to white
row.BackColor = System.Drawing.Color.White;
//Apply text style to each Row
row.Attributes.Add("class", "textmode");
//Apply style to Individual Cells of Alternating Row
if (i % 2 != 0)
{
for (int j = 0; j < row.Cells.Count; j++)
{
row.Cells[j].Style.Add("background-color", "#C2D69B");
}
}
}
gridView.RenderControl(hw);
//style to format numbers to string
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
response.Write(style);
response.Output.Write(sw.ToString());
response.Flush();
response.End();
}