我有一个简单的脚本,可以将数据库中的数据输出到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。我知道强制 Excel 从 csv 源转换值的唯一方法是使用"公式"作为 csv 数据中的值。
所以。。。若要强制 Excel 将数字解释为可以使用的文本,请执行以下操作:
....,'="5551212 "',...
CSV 使用分隔符来分隔列数据。没有特定数据类型的格式设置选项。问题在于Excel会自动默认数据类型。手动导入 CSV 时,您需要覆盖此设置。
为此:对于所有 CSV,您可以通过转到 Data -> Get External Data from Text
将所有数据导入为文本,然后选择Delimited
项目符号点,选中My data has headers
,单击Next
,然后检查Delimiters
列下的Comma
字段,点击Next
并 - 这是关键 - 突出显示数据预览中的所有列, 然后选择 Text
在Column data format
下点击 Finish
.
这将允许将所有CSV文件导入为文本,并解决所有前导和尾随0问题,所有科学记数法问题,并确保在与另一个文本字段进行直接比较时每个VLOOKUP匹配。
若要避免科学记数法,必须向要转换为 csv 的数组的每个值添加单引号。
这个例子在我的情况下有效。
function insertquote($value) {
return "'$value'";
}
foreach ($list as $ferow) {
fputcsv($fp, array_map(insertquote, $ferrow), ';');
}
我通过使用"Ale DC"答案取得了成功,但更改了"插入引用"功能。
foreach ($array as $line)
fputcsv($fh, array_map('insertquote', $line), $delimiter);
function insertquote($value) {
return "xEFxBBxBF".$value;
}