在Excel和记事本中打开CSV格式的文本格式

我收到了将数据保存到CSV文件并将其发送给客户的要求。 客户使用Excel和记事本查看此文件。 数据如下所示:

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和记事本中以相同的结果打开? 非常感谢任何build议!

不要拍摄使者。

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

Excel有多种select来导入文本文件,允许使用FieldInfo参数,该参数为所引入数据的每个字段(又名列)指定TextFileColumnDataTypes属性 。

如果您select从资源pipe理器文件夹窗口中双击一个CSV文件,那么您将不得不忍受Excel的“最佳猜测”是每个列的目标字段types。 在import过程中不会停止询问您的意见。 一些常见的错误包括:

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

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

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

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

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

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

我的build议是尽可能保留记事本中的值,并使用Excel中随时可用的工具和过程正确导入数据。