我已经在这个问题上一直在墙上敲了几天,我需要一些帮助。
我正在使用ASP.net创建一个excel文件,一切都很好,除了一个列必须格式化为小数到2个位置但是当它拉入excel时,excel会自动将其格式化为整数而不是保留小数位。
sw.Write(String.Format("{0:f}", CDbl(dr(14)).ToString("0.00")))
这会产生“20.00”
但是当我在excel中打开它时它显示为20 ...如果我选择整个列并将其格式化为数字,它会显示为20.00,就像它应该的那样但我不想这样做(我不能这样做)该文件应该被自动拾取并导入另一个需要该列为小数的系统。
任何建议都将不胜感激。
答案 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标记来解决您的问题。