2010-03-08 96 views
1

我已经在这个问题上一直在我的头上撞了两天,我需要一些帮助。ASP.NET Excel导出格式问题

我创建一个使用ASP.net的Excel文件,一切都很好,除了一列必须格式化为2位的小数,但是当它拉入Excel时,Excel会自动将其格式化为整数保留小数位。

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

,但是当我在Excel中打开它它显示为20 ...如果我选择整列并格式化像它应该它被显示为20.00数量,但我不想这样做(我不能这样做),文件应该被自动拾取并导入另一个需要列为小数的系统。

任何建议将不胜感激。

回答

1

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

答案各不相同。

格式化excel文档后,以适当的格式(html,CSV,XML等)保存,在记事本中打开文件,看看你的电话号码周围散布什么格式的代码。

第2部分(我不能把这个评论,所以我把我的评论我的回答) 对于文本文件(没有元数据),Excel探讨第10行左右,使一个猜测数据类型并应用默认格式。有时候,您可以通过确保前几行有数据并以excel可以猜测数据类型的方式对数据进行格式化来指导猜测过程。但是,AFAIK,您无法设置格式。

我建议切换到导出HTML表格。 Excel可以理解HTML表格,并且只要excel将字符串解释为字符串并保留格式化,您就可以使用有据可查的模型(HTML!)对颜色,大小等结果进行格式化,并且可能会格式化数字。

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

+0

我实际上创建一个制表符分隔文本文件,当我在Excel中格式化文件,并用记事本打开它的数据格式正确(它也格式正确,然后我用excel保存,我打开记事本)它只是当它在Excel中打开时Excel适用于自动格式的数字,它切断.00 – BWC 2010-03-09 00:01:09

+0

请参阅我的答案更新我的回应您的评论。 – MatthewMartin 2010-03-09 14:49:23

0

也许你不应该输出为字符串,但作为十进制或双? AFAIR,对象类型是可以接受的。

+0

它不要紧,我输出Excel格式,并切断.00 – BWC 2010-03-08 23:45:08

0

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

如果您想要正确的行为,您将需要使用不同的方法从您的网站生成您的文件。您需要使用VSTO或维护格式化语言的第三方库等实际创建Excel文件(.xls)。

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

1

就我所知,无法在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报表样本here并下载免费试用版here

声明:我自己的SpreadsheetGear LLC

0

Excel中是运用它的默认数字格式,因为源不持有任何格式的信息。除了让用户更改单元格格式外,还需要提供格式化数据。如果您想保留制表符分隔的格式,这将是问题。我已经得到了很好的结果,将数据作为一个HTML表格,并且按照您的需要格式化了字段。 Excel似乎尊重各种HTML属性。 This post讨论了一些其他格式问题,但会告诉你如何使用HTML和Excel标签来解决你的问题。