我有一个简单的脚本,可将数据库中的数据输出到CSV文件。
我的问题是,当我导出手机号码时,excel将其视为长整数并以科学计数法显示它们。
如果我去格式化单元格并将其更改为一个数字,它们都可以正常显示。
有没有一种方法可以将列设置为整数而不在excel中更改它。
这是我的代码:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Book Reference','Company','Type','Site Name', 'Date', 'Time', 'Name', 'Email', 'Mobile', 'Team ID'));
下面是while循环中的代码
// THIS IS WHERE I SET VARIABLES
fputcsv($output, array($booking_reference,$company,$type,$site_name,$date,$time,$name,$email,$mobile,$team_id));
CSV无法做到这一点,因为csv绝对无法指示字段的格式。 如果要将"大"数字视为文本,则可能应该考虑使用excel库生成本机.xls文件,在该文件中您可以强制将大数字视为文本。
将文件导入excel,然后可以在其中定义字段属性。 问题更多与excel如何默认CSV导入有关。
我喜欢PHPExcel来生成带有格式化单元格的xls文件。 这个SO线程还有更多建议:stackoverflow.com/questions/3133357/
我不得不处理这种事情一次。
虽然它不是很优雅,也不是纯CSV。
我所知道的迫使Excel从csv源强制转换值的唯一方法是使用"公式"作为csv数据中的值。
因此...强制excel将数字解释为可以使用的文本:
....,'=" =" 5551212"',...
CSV使用分隔符分隔列数据。没有针对特定数据类型的格式化选项。问题在于Excel会自动默认设置数据类型。手动导入CSV时,您需要覆盖此设置。
为此,请执行以下操作:对于所有CSV,可以通过转到Data -> Get External Data from Text,然后选择Delimited项目符号点,选中My data has headers,单击Next,然后在Comma字段中将所有数据作为文本导入。在Delimiters列下,单击Next,并且-这是关键-高亮显示数据预览中的所有列,然后在Finish之前在Column data format下选择Text。
这将允许将所有CSV文件作为文本导入,并解决所有前导和尾随0问题,所有科学计数法问题,并确保在与另一个文本字段进行直接比较时,每个VLOOKUP都匹配。
是的,我知道我可以在Excel中更改设置,更多是在寻找文件本身的解决方案。 可能必须查看库以生成.xls。 感谢您的答复。