我目前正在格式化DataSet / DataGrid中特定Excel文件导出的日期 日期的格式如下:
DateTime date = Convert.ToDateTime(entry.Date);
string formatdate = String.Format("{0:yyyy/MM/dd}", date);
创建DataSet后,我使用以下代码将DataSet导出到Excel文件:
public static void ExportDStoExcel(DataSet ds, string filename)
{
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.Charset = "";
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables[0];
dg.DataBind();
dg.RenderControl(htw);
response.Write(sw.ToString());
response.End();
}
}
}
我唯一的问题是,一旦我将其导出到Excel,Excel自动格式化这样的日期:MM / DD / YYYY而不是YYYY / MM / DD。
我知道这可以通过在Excel中打开来手动实现,但是Export正在构建到自动化系统中,需要进行硬编码。
有没有办法绕过Excel的DateTime自动格式化?
答案 0 :(得分:4)
我遇到了同样的问题,并通过在文本前添加一个非破坏空格(& nbsp)来解决它。从自动格式化中停止Excel。不是最干净的解决方案,但为我做了诀窍......
答案 1 :(得分:1)
现在您只是输出HTML表格,Excel会解释它的喜好。您可以将自己降低到Excel的级别,以便能够指定列的属性(将类型设置为Text而不是General)。 这意味着您需要生成实际的xls文件(那里有各种各样的库)。或者(如果可以接受对Office 2010的限制)使用Open XML格式,您可以使用常规.NET API编写。
答案 2 :(得分:1)
您可以使用mso-number-format
设置excel单元格的样式 mso-number-format:"\\@"
\@
会告诉excel仅以文本格式处理所有数据。所以自动格式不会发生。
请更新您的代码:
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
response.Write("<head><style> td {mso-number-format:\\@;} </style></head><body>");
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables[0];
dg.DataBind();
dg.RenderControl(htw);
response.Write(sw.ToString());
response.Write("</body></html>");
response.End();
}
}
OR
您也可以尝试使用特定的日期格式。 请参阅:http://cosicimiento.blogspot.in/2008/11/styling-excel-cells-with-mso-number.html
mso-number-format:"yyyy\/mm\/dd"