【问题标题】:ASP.NET - datatable to excel - change date formatASP.NET - 将数据表转换为 excel - 更改日期格式
【发布时间】: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。我建议。这很容易,所有这些问题都解决了。

标签: c# asp.net excel date


【解决方案1】:

在 Excel 中打开时,您的系统设置可能会否决格式设置。因为它只不过是您发送给客户端的 html 内容。如果您继续使用那段代码,请尝试在您写日期的那一行添加一个撇号:

row[dataTable.Columns[i++]] = "'" + date.ToString("yyyy-MM-dd");

这样,excel 不会将此视为日期字段,因此不会遵循系统设置的短日期表示法。如果这对您来说没问题...它将作为文本字段加载/显示。

如果您仍想继续编写代码,但在 excel 中查看生成的文件时不喜欢撇号,请阅读 this firstthat 以获取有关 mso-number-format 的扩展信息。

【讨论】:

    【解决方案2】:

    添加DataTable列时,将colum类型设置为字符串,如

    dataTable.Columns.Add("Date1", typeof(string));
    

    然后在添加行时将 DateTime.ToString("yyyy-MM-dd") 设置到列槽中。

    dataTable.Rows.Add(date.ToString("yyyy-MM-dd"));
    

    这使您的 Excel 文件稍后可以将其理解为字符串,而不会尝试将其本身格式化为日期。

    【讨论】:

    • 假设您正在生成一个实际的 Excel 文件,我给出了这个答案。如果您不这样做,请尝试 OfficeOpenXml
    • 你为什么要假设生成了一个实际的 Excel 文件,而问题本身却显示了它是如何生成的?
    • Office Open XML SDK 对于 Excel 来说很糟糕。一个可怕的 API,你找不到你的胳膊和腿。我建议使用 EPPlus,它用一组合理的 API 包装了 SDK。
    • 我可以从一个包含 30 行代码的数据集中制作一个 xlsx 文件,该文件既可以与 MS Office 一起使用,也可以与 LibreOffice 一起使用。它比我以前使用的库要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-05-21
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多