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