ASP.NET Excel导出格式化问题

在这个问题上,我已经把头撞在墙上几天了,我需要一些帮助。

我创build一个Excel文件使用ASP.net和一切都很好,除了一列必须被格式化为2个地方的小数,但是当它拉入Excel中,Excel将自动格式化为一个整数,而不是保留小数地方。

sw.Write(String.Format("{0:f}", CDbl(dr(14)).ToString("0.00")))产生“20.00”

但是,当我打开它在Excel中显示为20 …如果我select整列,并将其格式化为一个数字它显示为20.00像它应该,但我不想这样做(我可以'这样做)文件应该被自动拾取并导入另一个系统,需要列是十进制的。

任何build议将不胜感激。

您是否将输出写入CSV,HTML,XML,DOCX或者是否使用第三方库来生成二进制Excel 2003?

答案各不相同。

格式化Excel文档后,保存在适当的格式(HTML,CSV,XML等)在记事本打开文件,并看看什么格式的代码excel撒在你的电话号码。

第2部分(我不能把它放在注释中,所以我把我的评论放在我的答案中)对于文本文件(没有元数据),Excel查看前10行左右,猜测数据types,并应用一个默认格式。 有时你可以通过确保前几行有数据来指导猜测过程,并且可以通过excel猜测数据types的方式进行格式化。 但是,AFAIK,你不能设置格式。

我build议切换到导出HTML表格。 Excel可以理解HTML表格,并且只要excel将字段解释为string并保留格式化,您就可以使用logging良好的模型(HTML!)来格式化结果的颜色,大小等。

如果失败,请使用第三方库(如http://www.codeplex.com/ExcelPackage)导出docx。

据我所知,在CSV中不能指定格式“0.00”。 Excel似乎从CSV中选取了一些格式,例如$ 123.00将被格式化为两位小数的货币。

SrpreadsheetGear for .NET将做到这一点。 这是一个简单的例子:

 using System; using SpreadsheetGear; namespace Program { class Program { static void Main(string[] args) { // Create a new empty workbook and get a reference to Sheet1!A1. var workbook = SpreadsheetGear.Factory.GetWorkbook(); var a1 = workbook.Worksheets[0].Cells["A1"]; // Format A1 as numeric with two decimals. a1.NumberFormat = "0.00"; // Put 123 in A1. a1.Value = 123; // Save as xls. workbook.SaveAs(@"c:\tmp\FormattedNumber.xls", FileFormat.Excel8); // Save as xlsx. workbook.SaveAs(@"c:\tmp\FormattedNumber.xlsx", FileFormat.OpenXMLWorkbook); } } } 

您可以在这里看到实时的ASP.NET Excel报告示例,并在此处下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC

也许你不应该输出为string,但作为小数或双? AFAIR,对象types是可以接受的。

如果你打开一个制表符分隔的文件,双击它(基本上你在做什么,当你的网站stream它)Excel“猜测”在你想要的格式。 您必须打开Excel,然后使用文件菜单打开文件所在的位置,并使用导入向导来select列的数据types。 然后你得到你想要的格式。

如果您需要正确的行为,您将需要使用不同的方法从您的网站生成您的文件。 您将需要使用类似VSTO或维持格式化语言的第三方库来创buildExcel文件(.xls)。

另一种select是学习Excel文件格式,以便在数据上使用xslt转换来生成文件….或者将其完全写入代码中。

由于源不包含任何格式信息,因此Excel应用默认数字格式。 除了让用户更改单元格格式之外,还需要提供具有格式的数据。 这将是问题,如果你想保持制表符分隔格式。 我已经有良好的结果发送数据作为一个HTML表格与您所需的格式化的字段。 Excel似乎尊重各种HTML属性。 本文讨论一些其他格式问题,但会给你一个想法如何使用HTML和Excel标签来解决你的问题。