如何阻止Excel吃掉我美味的CSV文件并排出无用的数据?

Modified on: Fri, 21 Dec 2018 00:00:03 +0800

我有一个数据库,可以按序列号跟踪小部件的销售情况。用户输入购买者数据和数量,并将每个小部件扫描到自定义客户端程序中。然后他们完成订单。这一切都完美无瑕。

有些客户需要与他们购买的小部件的Excel兼容电子表格。我们使用PHP脚本生成它,该脚本查询数据库并将结果输出为带有商店名称和相关数据的CSV。这也非常有效。

在记事本或vi等文本编辑器中打开时,文件如下所示:

"Account Number","Store Name","S1","S2","S3","Widget Type","Date"
"4173","SpeedyCorp","268435459705526269","","268435459705526269","848 Model Widget","2011-01-17"

如您所见,序列号存在(在这种情况下是两次,并非所有二级序列都相同)并且是长串数字。
在Excel中打开此文件时,结果将变为:

Account Number  Store Name  S1  S2  S3  Widget Type Date 
4173    SpeedyCorp  2.68435E+17     2.68435E+17 848 Model Widget    2011-01-17

正如您所观察到的,序列号用双引号括起来。 Excel似乎不尊重.csv文件中的文本限定符。将这些文件导入Access时,我们没有任何困难。当打开它们作为文本时,没有任何麻烦。但Excel无疑会将这些文件转换为无用的垃圾。我们说,试图向最终用户指导使用非默认应用程序打开CSV文件的过程令人厌烦。有希望吗?有没有我无法找到的设置?这似乎是Excel 2003,2007和2010的情况。

作者:atroon

最佳答案

  

但Excel会毫不犹豫地将这些文件转换为无用的垃圾。

Excel是无用的垃圾。

解决方案

如果任何客户想要Excel格式的数据无法将这三列上的可见格式更改为带小数位零的“数字”或“文本”,我会感到有些意外。但是,让我们假设一个简短的操作文档是不可能的。

您的选择是:

  1. 将非数字字符,而不是空格字符放入序列号中。
  2. 使用一些默认格式写出xls文件或xlsx文件。
  3. 作弊并输出这些数字为公式="268435459705526269","",="268435459705526269"(你也可以="268435459705526269",,="268435459705526269"为自己保存2个字符)。这样做的好处是可以正确显示,并且通常很有用,但可以巧妙地打破(因为它们是公式)。
  4. 醇>

    请注意选项3,因为某些程序(包括Excel和Open Office Calc)将不再将=""字段中的逗号视为已转义。这意味着="abc,xyz"将跨越两列并打破导入。

    使用"=""abc,xy"""解决了这个问题,但由于Excel的公式长度限制,此方法仍然限制为255个字符。

作者:Jeroen,Tyler

相关问答

添加新评论