我将数据导出到C#.Net中的Excel工作表。我有一个列有“00123450098”的数据。导出的数据没有第一个零。我想要显示数据。
这是我的导出Excel代码。
string style = @"<style> .text { mso-number-format:\@; } </style> ";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
HtmlForm frm = new HtmlForm();
...................
...................
table.RenderControl(htw);
HttpContext.Current.Response.Write(style);
//render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
答案 0 :(得分:19)
导出到excel时,在插入值之前添加\t
将解决问题。
例如:
string test = "000456";
string insertValueAs = "\t" + test;
然后,字符串测试将被视为字符串值,而不是整数值。因此,它将保留前导零。
我遇到了同样的问题,上面的解决方案对我有用。希望这篇文章有所帮助!
答案 1 :(得分:6)
如果导出为CSV / TSV,请将其放入包含带有前导0或(特别是)16+位的文本“数字”的每个单元格中:
= “0012345”
..其中0012345是您要导出到该单元格的数字。
我希望我能记住我在哪里看到的。
答案 2 :(得分:4)
在Excel文件中,Numbers单元格始终剥离前导零,您可以通过跟随单引号设置前导零的数字。即。
00123450098至'00123450098
然后,该单元格的格式将更改为文本。 如果您生成的excel文件有任何公式,其中包含该单元格引用作为数字,那么它将无法按预期工作。
答案 3 :(得分:4)
我也有这个问题。我想出的解决方案是使用excel的内置char()函数隐藏前导零。在excel中,char()返回传递给它的ASCII字符代码的值,因此char(048)返回0。 在导出到excel之前,像这样添加变量......
varName = "=CHAR(048)&" + varName;
答案 4 :(得分:2)
我使用StackOverflow link和blog的组合找到了我的答案。 有一些excel格式样式可以应用于rowdatabound上的gridview。我使用了那些,现在我的导出不会删除前导零。
以下是我的代码示例。
ExpenseResultsGrid.RowDataBound += new GridViewRowEventHandler(ExpenseResultsGrid_RowDataBound); protected void AllQuartersGrid_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) {//add this style to prevent truncating leading zeros in fund code during export to excel e.Row.Cells[2].Attributes.CssStyle.Add("mso-number-format", "\\@"); } }
答案 5 :(得分:0)
导出时,只需在插入的值之前添加一个空字符串,如“”:
string x = "000123";
myWorksheet.Cells[1,1] = "" + x;