Sim*_*ast 93 csv formatting string text-formatting microsoft-excel
我一直在寻找一段时间,试图弄清楚如何以强制 Excel 将值解释为字符串而不是尝试将它们转换为数字或日期的方式输出 CSV 文件。
例如:
"141", "10/11/2002", "350.00", "1311742251"
Run Code Online (Sandbox Code Playgroud)
Excel 试图“智能地”将所有这些转换为其原生日期/数字格式。有没有办法解决这个问题?
编辑:澄清了我的问题的意图,抱歉混淆。
Sim*_*ast 98
对于那些可以控制源数据的人,显然 Excel 将自动检测 CSV 字段的格式,除非 CSV 列采用以下格式:
"=""Data Here"""
例如...
20, 5.5%, "0404 123 351", "3-6", "=""123"""
[number] [percent] [number] [date] [string] <-- how Excel interprets
Run Code Online (Sandbox Code Playgroud)
它也适用于 Google 电子表格,但不确定其他电子表格应用程序是否支持此表示法。
如果您怀疑任何数据本身可能包含引号,则需要对它们进行双重转义,如下所示...
"=""She said """"Hello"""" to him"""
Run Code Online (Sandbox Code Playgroud)
(编辑:更新更正,感谢 DMA57361!)
aja*_*abo 54
像许多人一样,我一直在为 Microsoft 做出的相同决定而苦苦挣扎,并尝试了各种建议的解决方案。
对于 Excel 2007,如下所示:
然而:
在将双引号括起来之前在所有值之前放置一个制表符确实可以防止转换为日期并且可以防止修剪前导零或尾随零,并且工作表甚至不会在每个单元格的左上角显示令人讨厌的警告标记。
例如:
"<tab character><some value>","<tab character><some other value>"
Run Code Online (Sandbox Code Playgroud)
请注意,制表符必须在双引号内。编辑:事实证明,双引号甚至不是必需的。
双击 csv 文件可以将文件作为 Excel 中的电子表格打开,其中显示所有作为上面处理的值,如文本数据。确保将 Excel 设置为使用“.” 作为小数点而不是','或者 csv 文件的每一行都将在每行的第一个单元格中作为一个文本结束。显然微软认为 CSV 意味着“不是小数点”分隔值。
DMA*_*361 23
使用 Excel 的导入功能,您可以指定每列应被解释为的格式(自动、文本或日期),并且不需要对数据文件进行任何修改。
你可以找到它Data吗?Get External Data? From Text在 Excel 2007/2010 中。
或者Data?Import External Data? Import Data在 Excel 2003 中。
这是 Excel 2003 文本导入向导对给定示例数据的操作图像,显示我将后两列作为文本导入:

小智 5
西蒙的例子对我来说不起作用,我怀疑这是语言差异。在 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);
Run Code Online (Sandbox Code Playgroud)
输出文件如下所示:
="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,=""
Run Code Online (Sandbox Code Playgroud)
可以看出,输出文件中的格式不是="VALUE",我"=""VALUE""",认为可能是 Visual Basic 约定的格式。
我正在使用 Excel 2010。顺便说一句,Google Sheets 不会打开/转换以此方式格式化的文件。如果您删除等号,它将起作用"VALUE",- Excel 仍然会打开文件,但忽略您希望列成为字符串的事实。