ASP.NET Excel导出格式问题

时间:2010-03-08 22:45:26

标签: 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,就像它应该的那样但我不想这样做(我不能这样做)该文件应该被自动拾取并导入另一个需要该列为小数的系统。

任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:1)

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

答案因人而异。

格式化excel文档后,以适当的格式(html,CSV,XML等)保存,在记事本中打开文件,查看数字周围的格式代码。

第2部分(我不能将其放在评论中,所以我将评论放在我的答案中) 对于文本文件(没有元数据),Excel会查看前10行,并猜测数据类型并应用默认格式。有时你可以通过确保前几行中有数据并且以excel可以猜测数据类型的方式格式化来引导猜测过程。但是,AFAIK,你无法设置格式。

我建议切换到导出HTML表格。 Excel理解HTML表格,您可以使用记录良好的模型(HTML!)来格式化颜色,大小等结果,并且只要excel将列解释为字符串并保留格式化,就可能编号格式化。

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您通过双击打开制表符分隔文件(基本上是您在网站流式传输时所执行的操作),Excel会以您想要的格式“猜测”。您必须打开Excel,然后使用文件菜单打开文件,向您显示导入向导,该向导允许您选择列的数据类型。然后你得到你想要的格式。

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

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

答案 4 :(得分:0)

Excel正在应用它的默认数字格式,因为源不包含任何格式信息。除了让用户更改单元格格式外,您还需要提供格式化数据。如果要保留制表符分隔格式,这将是一个问题。我已经有了很好的结果将数据作为HTML表格发送,并根据需要格式化了字段。 Excel似乎尊重各种HTML属性。 This post讨论了其他一些格式问题,但会让您了解如何使用HTML和Excel标记来解决您的问题。