由ASP.NET的Excel单元格格式化

我有个问题。 例如,其中一个数据表colums值是一个string值“001200”。 Excel文档创build值变成'1200'时。 如何保持数据格式? 我正在使用ASP.NET 1.1。

代码的一部分是:

private void lnkExport_Click( object sender, System.EventArgs e ) { Response.Clear(); Response.Buffer= true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader( "Content-Disposition", "attachment; filename=" + "CartsList.xls" ); Response.Charset = "iso-8859-8"; Response.Cache.SetCacheability( HttpCacheability.Public ); Response.ContentEncoding = System.Text.Encoding.UTF7; this.EnableViewState = false; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter( oStringWriter ); this.ClearControls( dtgCarts ); dtgCarts.RenderControl( oHtmlTextWriter ); Response.Write( oStringWriter.ToString() ); Response.End(); } 

谢谢

添加一个撇号(单引号)的开始 – 应该修复它。 它强制Excel将单元格视为文本而不是数字。

编辑:只是要清楚 – 撇号的东西是一个Excel的内置function,而不仅仅是我挑选的随机字符。 似乎无法find它的链接。

你有没有尝试在Excel中重新格式化单元格? 这可能只是Excelselect不同的格式(整数而不是string)。

这里有一篇关于.Net格式的Excel格式的文章 。

这个链接有你的问题的确切答案。 该文章使用完全相同的技术,您正在使用HTML来呈现Excel。

诀窍是使用Excel的CSS属性

 <style> .text { mso-number-format:\@; } </style> 

[编辑]
还有一个类似的问题的链接 。 (它在冷融合但CSS应用部分可以使用)

你可以在任何需要作为数字保留在一个单一的报价时,出口到Excel的例如

 '001200 

这应该保持为文本

我遇到了类似于你的问题,但在另一个方向。

这是Excel 2007文件的扩展属性设置。
“Extended Properties ='Excel 12.0 Xml; HDR = YES; IMEX = 1;'”;

您也可能想要使用您要使用的数据格式编写虚拟logging。 在Excel中声明某些文本不一定按照您希望的方式转换数据。

在幕后有一些可以自动设置传输过程中使用的数据types。 系统使用前8个logging来确定这一点。 如果你想要string值,用任何文本缓冲列,如果你需要更长的时间,我认为你需要缓冲它与512个字符的文本。

顺便说一句 – 我尝试了上面的大部分上述build议之前,发现系统秘密覆盖你以编程方式设置。

如果您可以更改单元格值并且它不包含公式的一部分,请尝试将数字更改为字母,例如: 001200 – > OO12OO 🙂

几个月前我也遇到了类似的问题,我放弃了Excel …我build议您使用Excel Jet Cell .NET组件

它有一个大小限制的免费版本。 看看Excel C#示例 :

 // Open template string xlfile = @"d:\prj\HrePro.xlsx"; ExcelWorkbook Wbook = ExcelWorkbook.ReadXLSX(xlfile); ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells; // Save values and excel file Cells["b2"].Value = "001"; Cells["b2"].Style.StringFormat = DefinedFormats.Textual; Wbook.WriteXLSX(@"d:\prj\HReport.xlsx"); 

再添加一行

的Response.Write(”

  td {mso-number-format:\ @;  } 

“);

很简单