2015-08-15 95 views
5

我收到了将数据保存到CSV文件并将其发送给客户的要求。 客户使用Excel和记事本查看此文件。 数据是这样的:在Excel和记事本中打开CSV格式的文本格式编号

975567EB,973456CE,971343C8

我的数据必须通过 “E3” 一些数量的最终像:

98765E3

所以当在Excel中打开,它将更改为:

9.8765E + 7

我写了一个程序来改变这种格式在C#中添加= “98765E3” 这个文本

while(!sr.EndOfStream) { 
    var line = sr.ReadLine(); 
    var values = line.Split(','); 

    values[0] = "=" + "\"" + values[0] + "\""; //Change number format to string 

    listA.Add(new string[] {values[0], values[1], values[2], values[3]}); 
} 

但随着客户,谁使用记事本打开CSV文件,它会显示这样的:

= “98765E3”

如何将CSV文本保存为CSV文件以在Excel和记事本中以相同的结果打开?非常感谢任何建议!

+2

这在我看来是不可能的。在使用Excel“打开”CSV时,Excel将猜测每个单一数据条目的数据类型。因此'98765E3'被猜测为数字,'=“98765E3”'被猜测为导致字符串的公式。这是因为在Excel中,默认情况下没有整个列的数据类型首选项。只有在使用导入向导导入CSV时,才可以选择整列的数据类型。所以人们可以说'98765E3'是文字而不是数字。 –

+0

您可以提供两种下载选项。一个用于记事本用户的CSV,一个用于Excel用户的真正Excel文件。 –

回答

3

不要拍摄信使。

问题不在于你在C#中导出(创建...?)数据的方式。这是你在Excel中打开CSV文件的方式。

Excel有导入文本文件,允许使用字段信息参数指定TextFileColumnDataTypes property数据的每个字段(又名列)在被带来了无数的选择。

如果选择双精度从资源管理器文件夹窗口中点击一个CSV文件,然后您将不得不忍受Excel针对每列所需的字段类型进行“最佳猜测”。在进口过程中不会停止询问您的意见。一些常见错误包括:

  • 带有E的字母数字值通常会被解释为科学记数法。
  • DMY日期的一半将被误解为错误的MDY日期(或反之亦然)。另一半将成为文本,因为Excel无法处理类似MDY 14/08/2015的内容。
  • 任何以+开头的值都会生成#NAME!错误,因为Excel认为您正在尝试引入具有命名质量的公式。

这是一个常见错误的简短列表。还有其他人。这是一些常见的解决方案。

  • 使用数据►获取外部数据►从文本。明确指定任何不明确的列数据类型;例如98765E3作为文本,日期为DMY,MDY,YMD等视情况而定。甚至可以选择丢弃一列无用的数据。
  • 使用文件►打开►文本文件,通过与上述选项相同的导入向导。可以使用这两个命令记录这些操作以便重复使用。
  • 使用VBA的Workbooks.OpenText method并指定每列的FieldInfo位置和数据类型(后者的常数为XlColumnDataType)。
  • 将导入文件读入内存并在将其转储到目标工作表之前将其存储在内存数组中。

还有一些不太精确的解决方案仍然受到Excel的一些解释。

  • 使用Range.PrefixCharacter迫使数与可以想象被误解为科学记数法到工作表作为文本前导零或字母数字的值。
  • 使用文本限定符字符;通常是ASCII字符034(例如")来包装要解释为文本的值。
  • 将整个文本文件复制并粘贴到目标工作表的A列中,然后使用Range.TextToColumns method(同样对每列可用FieldInfo选项)。

后面两种方法会在记事本中产生一些奇数值,但记事本不是Excel,并且不能在几秒钟内处理五十万次计算和其他操作。如果你必须混搭这两个程序,那么会有一些妥协。

我的建议是要离开的价值观是最好的,他们可以在记事本中,并使用现成的设备和工艺在Excel中正确导入数据。

相关问题