我想生成一个 CSV 文件供用户使用 Excel 打开它。
如果我想转义值中的逗号,我可以将其写为“640,480”。
如果我想保留前导零,我可以使用 =“001234”。
但是,如果我想在值中同时保留逗号和前导零,则写作 ="001,002" 将被拆分为两列。似乎没有解决方案来表达正确的数据。
有什么方法可以在 Excel 的 CSV 中表达001、002吗?
肯特弗雷德里克的答案包含解决方案:
"=""001,002"""
(我很想把它作为一个单独的答案发布,因为从肯特的回答中不清楚它是一个有效的 Excel 解决方案。)
在您的数据上放置一个前缀字符串:
"N001,002","N002,003"
(只要该前缀不是 E )
上面的表示法(至少在 OpenOffice 中)解析为总共 2 列,正确存储了 N001,002 个字节。
CSV 规范说 , 在引号字符串中是允许的。
此外,来自经验的警告:确保您也使用电话号码执行此操作。Excel 会将电话号码解释为浮点数并将它们保存为科学计数法 :/ ,而 1.800E10 并不是一个真正好的电话号码。
在 OpenOffice 中,这个 RawCSV 块也按预期解码:
"=""001,002""","=""002,004"""
IE:
$rawdata = '001,002';
$equation = "=\"$rawdata\"";
$escaped = str_replace('"','""',$equation);
$csv_chunk = "\"$escaped\"" ;
做
"""001,002"""
我通过键入“001,002”然后在 Excel 中另存为 CSV 发现了这一点。如果这不是您想要的(您不需要引号),这可能是您找到所需内容的好方法。
如果您愿意,另一个选项可能是使用制表符分隔的文本。
我博客的一位读者找到了一个解决方案,="001" & CHAR(44) & "002",在我的机器上似乎可行!
很老的线程,但你为什么不在你的值之后添加空格。然后它将被视为字符串,并且不会去除前导零。
“001,002”。“”
由于没有人提到它,因此认为在这篇旧帖子中值得一提。
如果\t
在数字前添加水平制表符,则 MS Excel 也会显示前导零。并且制表符不会显示在 Excel 工作表中。即使它被双引号包围。(铁 \"\t001,002\"
)
\0
与在此类数字之前放置又名 NULL相比,它在 Notepad++ 中看起来也更好。
我正在摆弄 CSV to Excel(我使用 PHP 来创建 CSV,但我想这个解决方案适用于任何语言。当您发现前导字符(例如 + 、 - 或 0 正在消失时,使用chr(13)
as创建 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";
}
If you are using "Content-Disposition" and exporting from asp to excel using HTML tags,then you have to add "style='mso-number-format:\@;'" to that tag and making it to accept only Text values ,thereby leading zeroes omission will be avoided,If Forward slash"\" is accepted use double forward slash "\"
更多地查看 Excel 电子表格,它看起来您想要的内容无法使用 CSV 完成。
该站点http://office.microsoft.com/en-us/excel/HP052002731033.aspx说“如果单元格显示公式而不是公式值,则公式将转换为文本。所有格式、图形、对象和其他工作表内容丢失了。欧元符号将转换为问号。”
但是,您可以更改加载方式以获得所需的结果。请参阅此网页: Microsoft 导入文本文件。
关键是选择导入外部数据-导入数据-文本文件,下一步,下一步,然后在列数据格式下勾选“文本”。这将防止它被解释为数字,并丢失格式。
Excel 根据内容对 CSV 列使用默认格式。因此,如果您在 csv 中有 001,excel 会自动将其变为 1。
将 csv 文件中的前导零保留在 excel 中的唯一方法是将 csv 文件的扩展名更改为 .txt,然后打开 excel,单击打开,选择 txt 文件,您将看到文本导入向导. 选择您的 csv 格式(以逗号分隔),然后确保选择“文本”作为格式。
就是这样,现在您可以将以前的 csv 数据导出到任何其他数据,同时保留前导零。
在所有当前 Excel 版本或 OS X 上的 Numbers 应用程序中,所有建议的答案现在似乎都不适合我("=""blahblah""" 和其他人)。
我发现通过摆弄来工作的唯一解决方案是在字符串的开头添加一个转义的空字符(在基于 PHP 或 C 的语言中是 \0 )。打开计算表时,所有内容都按原样处理,无需软件计算或处理。
echo "\0" . $data;