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