我有一个数据库,它按序列号跟踪小部件的销售情况。用户输入购买者数据和数量,并将每个小部件扫描到自定义客户端程序中。然后他们敲定订单。这一切都完美无缺。
一些客户想要他们购买的小部件的 Excel 兼容电子表格。我们使用 PHP 脚本生成它,该脚本查询数据库并将结果输出为带有商店名称和相关数据的 CSV。这也非常有效。
在记事本或 vi 等文本编辑器中打开时,文件如下所示:
"Account Number","Store Name","S1","S2","S3","Widget Type","Date"
"4173","SpeedyCorp","268435459705526269","","268435459705526269","848 Model Widget","2011-01-17"
Run Code Online (Sandbox Code Playgroud)
如您所见,序列号存在(在本例中为两次,并非所有二级序列号都相同)并且是一长串数字。在 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
Run Code Online (Sandbox Code Playgroud)
您可能已经观察到,序列号用双引号括起来。Excel 似乎不尊重 .csv 文件中的文本限定符。将这些文件导入 Access 时,我们的难度为零。将它们作为文本打开时,完全没有问题。但是 Excel 毫无疑问会将这些文件转换为无用的垃圾。试图指导最终用户使用非默认应用程序打开 CSV 文件的艺术变得,容我们说,令人厌烦。有希望吗?是否有我找不到的设置?Excel 2003、2007 和 2010 似乎就是这种情况。
虽然我尽量避免它,但我偶尔不得不在 Excel 中打开一个 CSV 文件。当我这样做时,它会格式化包含数字的列,这使它们对我的目的毫无用处。据我所知,防止在导入时发生这种情况的唯一方法是重命名文件,使扩展名不是 .csv 并使用导入向导分别指定每列的格式。对于 50-60 列的文件,这是不切实际的。
由于互联网上这个经常被问到的问题的每个答案都暗示了在文件打开后将格式化数字转换回的某种方法(这对我不起作用 - 我想解决一般问题,而不是一些特定情况)或手动选择每列的格式类型(我不想这样做),我正在寻找一种设置全局首选项或样式的方法,以便打开的所有 CSV 文件的所有列始终格式化为文本。我也知道用引号“保护”数字,但我得到的文件不是那样的,我希望避免对文件进行预处理,这样 Excel 就不会把它们搞砸。
有没有办法专门做到这一点:始终将打开的 CSV 文件中的所有列格式化为文本,而无需在导入过程中每次手动选择每一列?
我使用的是 Excel 2003,但如果您知道的话,我会回答 2007 年的问题。