ASP.NET – 数据expression到excel – 更改date格式

我从ASP数据表生成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(); 

我使用这种格式写date

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

问题是Excel将其显示为dd.mm.yyyy。 我可以强制Excel以我的格式显示这个date吗? 我怎样才能做到这一点?

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

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

这样,Excel不会将其视为date字段,因此不会遵循系统设置的短date表示法。 如果你没有问题…它会加载/显示为文本字段。

如果你仍然想跟随你的编码,但是在excel中查看生成的文件时不喜欢这个撇号,那么先读一下,然后再读一下,以获得有关mso-number-format的扩展信息。

添加DataTable列时,将columtypes设置为string,如

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

然后当添加行时将一个DateTime.ToString(“yyyy-MM-dd”)设置到列槽中。

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

这使得您的Excel文件稍后可以将其理解为一个string,并且不会将其自身格式化为date。