CSV的Excel,包括领先的零和逗号

我想生成一个CSV文件供用户使用Excel来打开它。

如果我想逃离价值观的逗号,我可以写成“640,480”。

如果我想保持前导零,我可以使用=“001234”。

但是如果我想保留逗号和前导零的值,写为=“001,002”将被分成两列。 似乎没有解决scheme来expression正确的数据。

有什么办法可以用Excel表示001,002的Excel?

肯特弗雷德里克的答案包含解决scheme:

  “=”“001002”“” 

(我打算把这个作为一个单独的答案来发布,因为肯特的答案并不清楚它是一个有效的Excel解决scheme。)

在数据上添加一个前缀string:

  "N001,002","N002,003" 

(只要该前缀不是E)

上面的符号(至less在OpenOffice中)parsing为总共2列,正确存储N001,002个字节。

CSV规范说,允许在报价string内。

另外,从经验警告:确保您也使用电话号码做到这一点。 Excel会另外将电话号码解释为一个浮点数并以科学记数法保存:/,并且1.800E10不是一个非常好的电话号码。

在OpenOffice中,这个RawCSV块也按预期进行解码:

  "=""001,002""","=""002,004""" 

即:

  $rawdata = '001,002'; $equation = "=\"$rawdata\""; $escaped = str_replace('"','""',$equation); $csv_chunk = "\"$escaped\"" ; 

 """001,002""" 

我通过input“001,002”,然后在Excel中保存为CSV来发现这一点。 如果这不正是你想要的(你不需要引号),这可能是一个很好的方式来find你想要的东西。

另一个选项可能是使用制表符分隔的文本,如果这是一个选项。

我的博客的读者find了解决scheme,=“001”和CHAR(44)&“002”,似乎在我的机器上可行!

很老的线程,但你为什么不只是在你的价值之后添加空格。 它将被视为string,不会剥离前导零。

“001,002”。“”

仔细查看Excel电子表格,它看起来不能用CSV完成。

此网站http://office.microsoft.com/en-us/excel/HP052002731033.aspx说:“如果单元格显示公式而不是公式值,公式将转换为文本。所有格式,graphics,对象和其他工作表内容欧元符号将被转换成问号。“

但是,您可以更改如何加载它以获得所需的结果。 看到这个网页: Microsoft导入一个文本文件 。

关键是要select“导入外部数据导入数据文本文件”,然后点击“下一步”,然后在列数据格式下勾选“文本”。 这将防止它被解释为一个数字,并失去格式。

我正在摆弄CSV到Excel(我使用PHP来创buildCSV,但我想这个解决scheme适用于任何语言。当你发现一个主要的字符(如+, – 或0正在消失,创buildCSV与chr(13)作为前缀,这是一个不可打印的字符,它为我的Excel Office 2010版本创造了奇迹,我尝试了其他非打印字符,但没有运气。

所以我使用啁啾互联网解决scheme,但用我的前缀调整:

 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"; } 

如果您正在使用“Content-Disposition”并使用HTML标记从asp导出为ex​​cel,则必须将“style ='mso-number-format:\ @;'”添加到该标记并使其仅接受文本值,从而避免导致零省略,如果正斜线“\”被接受使用双正斜杠“\”

所有build议的答案目前似乎不适用于我()=“”blahblah“”“和其他人)在所有当前的Excel版本或在OS X上的数字应用程序。

我发现通过摆弄的唯一解决scheme是在string的开头添加一个转义的空字符(在PHP或C语言中是\ 0)。 在打开计算表时,一切都会按照原样处理,而不会被软件计算或处理。

 echo "\0" . $data;