【发布时间】:2009-05-24 19:48:42
【问题描述】:
我必须构建一个 C# 程序来生成 CSV 文件并放入长数字(在我的程序中作为字符串)。问题是,当我在 Excel 中打开此 CSV 文件时,数字显示如下:
1234E+ 或 1234560000000(数字结尾为0)
如何保留数字的格式?如果我将文件作为文本文件打开,则数字格式正确。
提前致谢。
【问题讨论】:
我必须构建一个 C# 程序来生成 CSV 文件并放入长数字(在我的程序中作为字符串)。问题是,当我在 Excel 中打开此 CSV 文件时,数字显示如下:
1234E+ 或 1234560000000(数字结尾为0)
如何保留数字的格式?如果我将文件作为文本文件打开,则数字格式正确。
提前致谢。
【问题讨论】:
正如其他人所提到的,您可以强制数据为字符串。最好的方法是="1234567890123"。 = 使单元格成为公式,引号使括起来的值成为 Excel 字符串文字。这将显示所有数字,甚至超出 Excel 的数字精度限制,但单元格(通常)不能直接用于数字计算。
如果您需要数据保持数字,最好的方法可能是创建一个原生 Excel 文件(.xls 或 .xlsx)。可以在this related Stack Overflow question 的解决方案中找到各种方法。
如果您不介意使用千位分隔符,还可以使用另一种技巧,即让您的 C# 程序插入千位分隔符并将值括在引号中:“1,234,567,890,123”。不要包含前导 = (因为这将迫使它成为一个字符串)。请注意,在这种情况下,引号用于保护 CSV 中的逗号,而不是用于指定 Excel 字符串文字。
【讨论】:
将这些长数字格式化为字符串,方法是在前面放置一个 '(撇号)或从中创建一个公式:="1234567890123"
【讨论】:
你不能。 Excel 以十五位精度存储数字。如果您不介意无法在 Excel 中对数字执行计算,您可以将它们存储为文本,所有数字都会显示出来。
【讨论】:
当我生成要导入 Excel 的数据时,如果我想控制数据的显示方式,我不会生成 CSV 文件。相反,我写出一个 Excel 文件,其中适当设置了单元格的属性。我不知道是否有一个库可以在 C# 中为您执行此操作,而无需在生成文件的机器上安装 Excel,但它值得研究。
【讨论】:
我的两分钱:
我认为重要的是要意识到“数据”和“格式”之间存在差异。在此示例中,您试图将两者都存储在纯数据文件中。正如您从其他答案中可以看出的那样,这将改变数据的性质。 (换句话说,导致它被转换为字符串。CSV 文件是仅数据文件。您可以在这里和那里做一些技巧来将格式与数据合并,但在我看来,这实质上是通过合并破坏了数据它具有非数据值:即:“格式化”。
如果您确实需要能够存储格式信息,我建议,如果您有时间开发它,请切换到能够将格式信息与数据分开存储的文件类型。听起来这个问题很适合 XML 电子表格解决方案。通过这种方式,您不仅可以指定数据,还可以指定数据的类型和您选择使用的任何格式。
【讨论】: