警告:将GridView导出到Excel文件
本文关键字:Excel 文件 GridView 警告 | 更新日期: 2023-09-27 18:11:11
我有一个带有malty控件和网格视图的页面。
我想导出gridview数据到excel文件。我用这个类
public class GridViewExportUtil
{
public static void Export(string fileName, GridView gv)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
// add the header row to the table
if (gv.HeaderRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
// add each of the data rows to the table
foreach (GridViewRow row in gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
// add the footer row to the table
if (gv.FooterRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
}
}
/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}
我的gridview有特殊的格式,我使用波斯语。
当我使用这个类时,它是导出gridview到excel,但是
我的问题是:当打开excel文件,我得到错误"是在一个不同的格式比指定的文件扩展名"。当打开文件时,波斯语文字难以辨认
导出到excel是一个常见的问题,这取决于用户安装的是哪个版本。
看看这个问题的解决方案:你试图打开的文件的格式与Asp中文件扩展名指定的格式不同。净
通过在导出函数中输出的头部部分添加一些样式,对于从右向左对齐选项,它被插入到调用。
的声明级别。在项目中使用c#的例子:
private string AddExcelStyling()
{
StringBuilder sb = new StringBuilder();
sb.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office''n" +
"xmlns:x='urn:schemas-microsoft-com:office:excel''n" +
"xmlns='http://www.w3.org/TR/REC-html40'>'n" +
"<head>'n");
sb.Append("<style>'n");
sb.Append("@page");
sb.Append("mso-page-orientation:landscape;}'n");
sb.Append("</style>'n");
sb.Append("<!--[if gte mso 9]><xml>'n");
sb.Append("<x:ExcelWorkbook>'n");
sb.Append("<x:ExcelWorksheets>'n");
sb.Append("<x:ExcelWorksheet>'n");
sb.Append("<x:Name>Sheet Name</x:Name>'n");
sb.Append("<x:WorksheetOptions>'n");
sb.Append("<x:Print>'n");
sb.Append("<x:HorizontalResolution>600</x:HorizontalResolution'n");
sb.Append("<x:VerticalResolution>600</x:VerticalResolution'n");
sb.Append("</x:Print>'n");
sb.Append("<x:Selected/>'n");
sb.Append("<x:DisplayRightToLeft/>'n");
sb.Append("<x:DoNotDisplayGridlines/>'n");
sb.Append("</x:WorksheetOptions>'n");
sb.Append("</x:ExcelWorksheet>'n");
sb.Append("</x:ExcelWorksheets>'n");
sb.Append("</x:ExcelWorkbook>'n");
sb.Append("</xml><![endif]-->'n");
sb.Append("</head>'n");
sb.Append("<body>'n");
return sb.ToString();
}
查看此链接:http://forums.asp.net/p/1445619/3358464.aspx