【问题标题】:PHP fputcsv showing long integers in excel as scientific notationPHP fputcsv在excel中显示长整数作为科学记数法
【发布时间】:2015-04-20 21:48:02
【问题描述】:

我有一个简单的脚本,可以将数据库中的数据输出到 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/…

标签: php csv fputcsv


【解决方案1】:

我不得不处理这种事情一次。 虽然它不是很优雅,也不是纯 CSV。 我知道强制 Excel 从 csv 源转换值的唯一方法是使用“公式”作为 csv 数据中的值。

所以...强制 excel 将数字解释为您可以使用的文本:

....,'="5551212 "',...

【讨论】:

    【解决方案2】:

    CSV 使用分隔符来分隔列数据。特定数据类型没有格式化选项。问题在于 Excel 会自动默认数据类型。当您手动导入 CSV 时,您需要覆盖它。

    为此:对于所有 CSV,您可以将所有数据作为文本导入,方法是转到 Data -> Get External Data from Text,然后选择 Delimited 项目符号点,检查 My data has headers,单击 Next,然后检查字段CommaDelimiters 列下,点击Next 并且——这是关键——突出显示数据预览中的所有列,然后在点击Finish 之前选择Column data format 下的Text

    这将允许将所有 CSV 文件作为文本导入,并解决所有前导和尾随 0 问题、所有科学记数法问题,并确保在与另一个文本字段直接比较时每个 VLOOKUP 匹配。

    【讨论】:

    • 是的,我知道我可以更改 Excel 中的设置,更多的是为文件本身寻找解决方案。可能需要查看一个库来生成 .xls。感谢您的回复。
    【解决方案3】:

    为避免使用科学记数法,您必须为要转换为 csv 的数组的每个值添加单引号。

    这个例子适用于我的情况。

             function insertquote($value) {
                return "'$value'";
            }
    
    
    
            foreach ($list as $ferow) {
                fputcsv($fp, array_map(insertquote, $ferrow), ';');
            }
    

    【讨论】:

      【解决方案4】:

      我通过使用“Ale DC”答案获得了成功,但更改了“insertquote”功能。

          foreach ($array as $line) 
                  fputcsv($fh, array_map('insertquote', $line), $delimiter);
          
      function insertquote($value) {
              return "\xEF\xBB\xBF".$value;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-16
        • 1970-01-01
        • 2014-12-23
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多