Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Excel和记事本中打开时,将数字格式化为CSV文本_C#_Excel_Csv_Notepad++ - Fatal编程技术网

C# 在Excel和记事本中打开时,将数字格式化为CSV文本

C# 在Excel和记事本中打开时,将数字格式化为CSV文本,c#,excel,csv,notepad++,C#,Excel,Csv,Notepad++,我收到一项要求,要求将数据保存在CSV文件中并发送给客户。 客户使用Excel和记事本查看此文件。 数据如下所示: 975567EB、973456CE、971343C8 我的数据有一些以“E3”结尾的数字,比如: 98765E3 因此,在Excel中打开时,它将更改为: 9.8765E+7 我编写了一个程序,通过在C中添加=“98765E3”将此格式更改为文本# 但对于使用记事本打开CSV文件的客户,它将显示如下: =“98765E3” 如何将数字保存为CSV中的文本,以便在Excel和记事本中

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

975567EB、973456CE、971343C8

我的数据有一些以“E3”结尾的数字,比如:

98765E3

因此,在Excel中打开时,它将更改为:

9.8765E+7

我编写了一个程序,通过在C中添加=“98765E3”将此格式更改为文本#

但对于使用记事本打开CSV文件的客户,它将显示如下:

=“98765E3”

如何将数字保存为CSV中的文本,以便在Excel和记事本中打开并获得相同的结果?非常感谢您的建议

不要向信使开枪

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

Excel有许多用于导入文本文件的选项,这些选项允许使用FieldInfo参数,该参数指定导入数据的每个字段(也称为列)的值

如果您选择从资源管理器文件夹窗口双击CSV文件,那么您将不得不忍受每个列的Excel“最佳猜测”字段类型。它不会在导入过程的中途停下来征求您的意见。一些常见错误包括:

  • 带有E的字母数字值通常被解释为科学符号
  • DMY日期的一半将被错误地解释为错误的MDY日期(反之亦然)。另一半将成为文本,因为Excel无法将2015年8月14日之类的内容作为MDY处理
  • 任何以+开头的值都将生成一个#名称!错误,因为Excel认为您正在尝试引入具有命名质量的公式
这是一个常见错误的简短列表。还有其他的。以下是一些常见的解决方案

  • 使用数据► 获取外部数据► 从文本。明确指定任何不明确的列数据类型;e、 g.98765E3为文本,日期为DMY、MDY、YMD等,视情况而定。甚至可以选择丢弃一列无用数据
  • 使用文件► 打开► 文本文件,使您通过与上述选项相同的导入向导。可以使用任一命令记录这些操作以供重复使用
  • 使用VBA并指定每列的FieldInfo位置和数据类型(后者带有常量)
  • 将导入文件读入内存并在内存数组中进行处理,然后将其转储到目标工作表中
还有一些不太精确的解决方案仍然需要Excel进行解释

  • 使用a将可能被误解为科学符号的带前导零或算术值的数字强制作为文本输入工作表
  • 使用文本限定符字符;通常使用ASCII字符034(例如,
    )来包装要解释为文本的值
  • 将整个文本文件复制并粘贴到目标工作表的A列中,然后使用(同样,每个列都有FieldInfo选项)
后两种方法会在记事本中产生一些奇怪的值,但记事本不是Excel,无法在几秒钟内处理50万次计算和其他操作。如果必须将两个程序混合在一起,则会有一些折衷


我的建议是尽可能将值保留在记事本中,并使用Excel中现成的工具和流程正确导入数据。

我认为这是不可能的。而“使用Excel的CSV,Excel将猜测每个数据项的数据类型。因此,
98765E3
被猜测为数字,
=“98765E3”
被猜测为产生字符串的公式。这是因为Excel中每个默认值的整列没有数据类型首选项。只有使用导入向导导入CSV,才能选择整个列的数据类型。因此可以说,
98765E3
是文本而不是数字。一个是用于记事本用户的CSV文件,另一个是用于Excel用户的真实Excel文件。
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]});
}