我将SP的内容导出到excel。其中一列将日期格式显示为08/2015,但在导出到Excel时,格式将更改为2015年8月。
我做了同样的谷歌,发现包括下面的代码就可以了;
string style = @"<style> .text { mso-number-format:\@; } </style> ";
导出到excel(数据集到Excel)在下面工作;
/// <summary>
/// This method can be used for exporting data to excel from dataset
/// </summary>
/// <param name="dgrExport">System.Data.DataSet</param>
/// <param name="response">System.Web.Httpresponse</param>
public static void DataSetToExcel(System.Data.DataSet dtExport, System.Web.HttpResponse response, string strFileName)
{
string style = @"<style> .text { mso-number-format:\@; } </style> ";
//Clean up the response Object
response.Clear();
response.Charset = "";
//Set the respomse MIME type to excel
response.ContentType = "application/vnd.ms-excel";
//Opens the attachment in new window
response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName.ToString() + ".xls;");
response.ContentEncoding = Encoding.Unicode;
response.BinaryWrite(Encoding.Unicode.GetPreamble());
//Create a string writer
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
//Create an htmltextwriter which uses the stringwriter
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
//Instantiate the datagrid
System.Web.UI.WebControls.GridView dgrExport = new System.Web.UI.WebControls.GridView();
//Set input datagrid to dataset table
dgrExport.DataSource = dtExport.Tables[0];
//bind the data with datagrid
dgrExport.DataBind();
//Make header text bold
dgrExport.HeaderStyle.Font.Bold = true;
//bind the modified datagrid
dgrExport.DataBind();
//Tell the datagrid to render itself to our htmltextwriter
dgrExport.RenderControl(htmlWrite);
response.Write(style);
//Output the HTML
response.Write(stringWrite.ToString());
response.End();
}
我在哪里弄错了?请指导!
谢谢!
答案 0 :(得分:3)
问题不在于日期格式,Excel根据CELL的数据类型(Default is GENERAL
)转换数据。为防止数据转换,您必须提供数据类型(TEXT
)以及数据。
您使用了正确的代码,但样式表.text
未应用于您的数据。在所有<TD>
标签上应用样式表。它将100%正常工作,并将保留您提供的数据(Date- 08/2015, 0001 or any data
)。
string style = @"<style> TD { mso-number-format:\@; } </style> ";
答案 1 :(得分:1)
以下是一些示例代码。
Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid g = new DataGrid();
DataTable d = new System.Data.DataTable();
d = (DataTable)Session["ReportData"];
g.DataSource = d;
g.DataBind();
foreach (DataGridItem i in g.Items)
{
foreach (TableCell tc in i.Cells)
tc.Attributes.Add("class", "text");
}
g.RenderControl(htmlWrite);
string style = @"<style> .text { mso-number-format:\@; } </style> ";
Response.Write(style);
Response.Write(stringWrite.ToString());
Response.End();
答案 2 :(得分:0)
我真的不太了解相当多的代码(在asp.net中不流利)但我会说如果你想在excel表中强制文本,你需要在放置你的文件之前将目标区域定义为文本那里的数据。
如果我对代码的理解是正确的,那么:
response.Write(style);
需要在此之前。
dgrExport.RenderControl(htmlWrite);
编辑:也许是另一种解决方案
您找到的谷歌代码位将单元格的格式设置为文本。在所有可能的情况下,您希望excel将日期视为具有MM / YYYY显示格式的日期。
也许可以尝试替换它:
string style = @"<style> .text { mso-number-format:\@; } </style> "
与
string style = @"<style> .text { mso-number-format:\mm/yyyy; } </style> "
我不确定/或\是否是ASP.net中的转义字符,所以确切的snytax可能会有所不同。在excel术语中,数字格式@表示文本,mm / yyyy表示具有所需显示格式的日期。