在Excel和记事本中同时打开时,将数字格式为CSV文本
本文关键字:数字 格式 文本 CSV Excel 记事本 | 更新日期: 2023-09-27 18:07:58
我收到一个将数据保存为CSV文件并发送给客户的要求。客户可以同时使用Excel和记事本查看此文件。数据如下:
975567EB, 973456CE, 971343C8
我的数据有一些以"E3"结尾的数字,如:
98765 e3
所以当在Excel中打开时,它会变成:
9.8765 e + 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文件的客户,它会显示如下:
="98765 e3 "
我如何将数字保存为CSV中的文本,在Excel和记事本中打开,结果相同?非常感谢任何建议!
不要射信使。
你的问题不是你在c#中导出(创建…?)数据的方式。这是你在Excel中打开CSV文件的方式。
Excel有许多导入文本文件的选项,允许使用FieldInfo参数,该参数指定每个字段(也称为列)的数据的TextFileColumnDataTypes属性。
如果你选择在资源管理器文件夹窗口中双击CSV文件,那么你将不得不忍受Excel"最佳猜测"是你每列的预期字段类型。它不会在进口过程中途停下来征求你的意见。一些常见错误包括:
- 带E的字母数字值通常被解释为科学记数法。
- 一半的DMY日期将被误解为错误的MDY日期(反之亦然)。另一半将成为文本,因为Excel不能将14/08/2015等内容处理为MDY。
- 任何以+开头的值都会生成一个#NAME!错误,因为Excel认为您试图引入一个命名质量的公式。
这是一个常见错误的简短列表。还有其他的。以下是一些常见的解决方案。
- 使用数据►从文本获取外部数据►显式指定任何不明确的列数据类型;例如98765E3为文本,日期为DMY、MDY、YMD等,视情况而定。甚至可以选择丢弃一列无用的数据。
- 使用File►Open►Text Files将带您通过与上面选项相同的导入向导。可以使用任一命令记录这些动作以便重复使用。
- 使用VBA的工作簿。OpenText方法并指定每个列的FieldInfo位置和数据类型(后者带有XlColumnDataType常量)。
- 将导入文件读入内存并在内存数组中处理,然后将其转储到目标工作表中。
有一些不太精确的解决方案仍然受制于Excel的一些解释。
- 使用范围。前缀字符,用于强制带有前导零或字母数字值的数字,这些数字可能会被误解为科学记数法,并将其作为文本输入工作表。
- 使用文本限定符;通常是ASCII字符034(例如
"
)来换行你想要被解释为文本的值。- 复制并粘贴整个文本文件到目标工作表的A列,然后使用范围。TextToColumns方法(同样为每个列提供FieldInfo选项)。
后两种方法会在记事本中产生一些奇怪的值,但记事本不是Excel,不能在几秒钟内处理50万次计算和其他操作。如果您必须混搭这两个程序,将会有一些妥协。
我的建议是尽可能在记事本中保留最好的值,并使用Excel中现成的工具和流程来正确导入数据。