【发布时间】:2010-09-23 10:14:20
【问题描述】:
我想生成一个 CSV 文件供用户使用 Excel 打开它。
如果我想转义值中的逗号,我可以将其写为“640,480”。
如果我想保留前导零,我可以使用 ="001234"。
但如果我想在值中同时保留逗号和前导零,写为 ="001,002" 将被拆分为两列。似乎没有办法表达正确的数据。
有没有什么方法可以在 CSV for Excel 中表达 001, 002?
【问题讨论】:
我想生成一个 CSV 文件供用户使用 Excel 打开它。
如果我想转义值中的逗号,我可以将其写为“640,480”。
如果我想保留前导零,我可以使用 ="001234"。
但如果我想在值中同时保留逗号和前导零,写为 ="001,002" 将被拆分为两列。似乎没有办法表达正确的数据。
有没有什么方法可以在 CSV for Excel 中表达 001, 002?
【问题讨论】:
由于没有人提到它,因此认为值得在这篇旧帖子中提及它。
如果在数字前添加水平制表符\t,则 MS Excel 也会显示前导零。并且制表符不会显示在 Excel 工作表中。即使它被双引号包围。 (例如\"\t001,002\")
它在 Notepad++ 中看起来也更好,与在此类数字前放置 \0 aka NULL 相比。
【讨论】:
"\xA0" 非中断空格字符前添加前缀 - 这将起作用,并且它不是可见字符。
Excel 根据内容使用 CSV 列的默认格式。所以如果你的csv中有001,excel会自动把它变成1。
在 csv 文件中保留前导零的唯一方法是将 csv 文件的扩展名更改为 .txt,然后打开 excel,单击打开,选择 txt 文件,您将看到文本导入向导。选择您的 csv 格式(以逗号分隔),然后确保选择“文本”作为格式。
就是这样,现在您可以将以前的 csv 数据导出到任何其他数据,同时保留前导零。
【讨论】:
相当老的线程,但你为什么不在你的价值之后添加空格。然后它将被视为字符串,并且不会去除前导零。
“001,002”。“”
【讨论】:
在所有当前 Excel 版本或 OS X 上的 Numbers 应用程序中,所有建议的答案现在似乎都不适合我(“=""blahblah""" 等)。
我发现通过摆弄来工作的唯一解决方案是在字符串的开头添加一个转义的空字符(在基于 PHP 或 C 的语言中是 \0)。打开计算表时,所有内容都按原样处理,无需软件计算或处理。
echo "\0" . $data;
【讨论】:
在你的数据上加上前缀字符串:
"N001,002","N002,003"
(只要该前缀不是 E )
上面的表示法(至少在 OpenOffice 中)将总共解析为 2 列,其中 N001,002 字节正确存储。
CSV 规范说 , 在引号字符串中是允许的。
另外,来自经验的警告:确保您也使用电话号码执行此操作。 Excel 会将电话号码解释为浮点数并将它们保存为科学计数法 :/ ,而 1.800E10 并不是一个真正好的电话号码。
在 OpenOffice 中,这个 RawCSV 块也可以按预期解码:
"=""001,002""","=""002,004"""
即:
$rawdata = '001,002';
$equation = "=\"$rawdata\"";
$escaped = str_replace('"','""',$equation);
$csv_chunk = "\"$escaped\"" ;
【讨论】:
"\xA0" 将 - 并且具有以下优点它不是一个可见的字符。 (也不会像前缀制表符那样搞乱编辑)。
如果您使用“Content-Disposition”并使用 HTML 标签从 asp 导出到 excel,则必须将“style='mso-number-format:\@;'”添加到该标签并使其接受只有文本值,从而避免前导零遗漏,如果接受正斜杠“\”,则使用双正斜杠“\”
【讨论】:
我正在摆弄 CSV 到 Excel(我使用 PHP 创建 CSV,但我猜这个解决方案适用于任何语言。当您发现前导字符(例如 + 、 - 或 0 正在消失时,创建以 chr(13) 为前缀的 CSV。这是一个不可打印的字符,它对我的 Excel Office 2010 版本非常有用。我尝试了其他不可打印的字符,但没有成功。
所以我使用 Chirp Internet 解决方案,但使用我的前缀进行了调整:
if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
$str = chr(13)."$str";
}
【讨论】:
Kent Fredric 的回答包含解决方案:
"=""001,002"""
(我懒得将此作为单独的答案发布,因为从 Kent 的回答中不清楚这是一个有效的 Excel 解决方案。)
【讨论】:
& 运算符将它们连接起来。例如,"=""123""&""456""&""789""" 会产生 字符串 123456789。请注意,Excel 2003 及更早版本的公式中有 1024 个字符的限制。 Excel 2007 及更高版本将限制增加到 8192。
我博客的一位读者找到了一个解决方案,="001" & CHAR(44) & "002",在我的机器上似乎可行!
【讨论】:
更多地查看 Excel 电子表格,它看起来您想要的内容无法使用 CSV 完成。
此站点http://office.microsoft.com/en-us/excel/HP052002731033.aspx 说“如果单元格显示公式而不是公式值,则公式将转换为文本。所有格式、图形、对象和其他工作表内容都将丢失。欧元符号将转换为问号。”
但是,您可以更改加载方式以获得所需的结果。请参阅此网页: Microsoft import a text file.
关键是选择导入外部数据-导入数据-文本文件,下一步,下一步,然后在列数据格式下勾选“文本”。这将防止它被解释为数字并丢失格式。
【讨论】:
做
"""001,002"""
我通过键入“001,002”然后在 Excel 中另存为 CSV 发现了这一点。如果这不是您想要的(您不需要引号),这可能是您找到所需内容的好方法。
如果您愿意,另一个选项可能是使用制表符分隔的文本。
【讨论】: