PHP fputcsv 在 excel 中以科学记数法显示长整数



我有一个简单的脚本,可以将数据库中的数据输出到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 并 - 这是关键 - 突出显示数据预览中的所有列, 然后选择 TextColumn 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;
    }

最新更新