ASP.NET - 数据表到Excel - 更改日期格式

时间:2017-08-30 12:51:49

标签: c# asp.net excel date

我正在从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以我的格式显示此日期吗?我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

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

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

然后在添加行时,将DateTime.ToString(“yyyy-MM-dd”)设置为列槽。

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

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

答案 1 :(得分:0)

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

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

这样,excel不会将其视为日期字段,因此不遵循系统设置的短日期符号。如果你这样做很好......它将加载/显示为文本字段。

如果您仍然希望继续编码,但在excel中查看生成的文件时不喜欢撇号,请阅读this first然后that以获取有关mso-number格式的扩展信息。