Answers:
对于那些可以控制源数据的人,除非CSV列采用以下格式,否则Excel显然会自动检测CSV字段的格式:
"=""Data Here"""
例如...
20, 5.5%, "0404 123 351", "3-6", "=""123"""
[number] [percent] [number] [date] [string] <-- how Excel interprets
它也可以在Google Spreadsheet中使用,但不确定其他电子表格应用程序是否支持此表示法。
如果您怀疑任何数据本身可能包含引号,则需要像这样对它们进行两次转义 ...
"=""She said """"Hello"""" to him"""
(编辑:已更正,感谢DMA57361!)
"=""123"""
错误的格式。包含的字段"
必须定界,并且字段中的"
s与其他"
s 转义。
="123"
不是有效的CSV字段,因为它包含字段分隔符,"
但没有正确地分隔它或该字段。Excel恰好以公式形式读取它的事实完全取决于Excel,而与CSV文件无关。
像许多人一样,我一直在努力做出与Microsoft相同的决定,并尝试了各种建议的解决方案。
对于Excel 2007,执行以下操作:
然而:
在所有值之前放置一个制表符,然后在双引号周围加上双引号确实可以防止转换为日期,并且可以防止对前导零或尾随零进行修整,并且工作表甚至在每个单元格的左上角都没有显示讨厌的警告标记。
例如:
"<tab character><some value>","<tab character><some other value>"
请注意,制表符必须在双引号内。编辑:事实证明双引号甚至没有必要。
双击csv文件可以在Excel中以电子表格的形式打开该文件,其中显示了所有被视为上面的值,例如文本数据。确保将Excel设置为使用“。” 作为小数点而不是','或csv文件的每一行都将以文本形式出现在每一行的第一个单元格中。显然,Microsoft认为CSV表示“不是小数点”分隔值。
使用Excel的导入功能,您可以指定应解释为每列的格式(自动,文本或日期),并且不需要对数据文件进行任何修改。
你可以找到它Data
→交通Get External Data
→交通From Text
在Excel 2007/2010。
或Data
→交通Import External Data
→交通Import Data
在Excel 2003中。
这是对给定的示例数据起作用的Excel 2003文本导入向导的图像,向我展示了如何将后两列作为文本导入:
西蒙的例子对我没有用,我怀疑这是语言上的差异。在C#中,我的工作格式字符串如下所示:
var linebreak = (i++ == list.Count) ? "" : "\r\n";
csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);
这是输出文件的样子:
="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""
可以看出,输出文件中的格式="VALUE",
不是"=""VALUE""",
我认为可能是Visual Basic约定的格式。
我正在使用Excel2010。顺便说一句,Google表格不会打开/转换以这种方式设置格式的文件。如果这样删除等号,它将起作用"VALUE",
-Excel仍将打开文件,但忽略您希望列为字符串的事实。
强制Excel将日期解释为文本的一种简单方法是在日期前加上单引号,而不是使用全引号,如下所示:
'10 / 11/2002
如果可以导入CSV而不是打开它,则可以告诉Excel每列应采用的格式。看看我问的这个问题。