【发布时间】:2018-02-08 04:49:25
【问题描述】:
我正在从 ASP DataTable 生成 xls 文件:
var excelGrid = new DataGrid { DataSource = dataTable };
excelGrid.DataBind();
Response.Clear();
Response.ContentType = "application/vnd.xls";
Response.ContentEncoding = Encoding.GetEncoding("iso-8859-1");
Response.Charset = Encoding.UTF8.EncodingName;
var fileName = "export_" + DateTime.Now.ToShortDateString() + ".xls";
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.ContentEncoding = Encoding.Unicode;
Response.BinaryWrite(Encoding.Unicode.GetPreamble());
var swriter = new StringWriter();
var hwriter = new HtmlTextWriter(swriter);
excelGrid.RenderControl(hwriter);
Response.Write(swriter.ToString());
Response.End();
我用这种格式写日期
row[dataTable.Columns[i++]] = date.ToString("yyyy-MM-dd");
问题在于 Excel 将其显示为 dd.mm.yyyy。 我可以强制 Excel 以我的格式显示此日期吗?我该怎么做?
【问题讨论】:
-
我不知道您的对象的类型,但我怀疑
DataGrid类型的控件在渲染 到TextWriter时会产生@ 类型的输出987654327@。我很容易认为您的 HTML 表使用了错误的 MIME 类型(但 Excel 只是在警告有关与内容不匹配的扩展名后才打开它)。 -
您没有生成 Excel 文件。您正在生成一个 HTML 文件,并为其提供 Excel MIME 类型和扩展名。为什么不生成带有库的实际 Excel 文件,您可以在其中完全控制其内容?
-
我认为你不能强制 Excel 以这种方式显示你想要的日期。但是使用 excel 库或 excel 互操作是可能的。
-
@BhubanShrestha 请不要建议将 Excel 互操作作为 ASP.NET 的可能解决方案。那是terrible idea。
-
请考虑使用 EpPlus nuget.org/packages/EPPlus。我建议。这很容易,所有这些问题都解决了。