【问题标题】:Excel CSV numbers to normal string for PHPExcel CSV 数字转换为 PHP 的普通字符串
【发布时间】:2014-07-28 08:20:17
【问题描述】:

我正在开发一个导入模块,管理员可以在该模块中从 CSV 文件中导入多行客户信息(包括客户的 ID 号,它是一个 13 位数字值)。

问题似乎是,如果值为 8888881111088,Excel 会将数字转换为 8.88888E+12,我需要验证该数字(即使它是一个字符串)以匹配回数据库中的先前条目)。

不幸的是,我不能依赖管理员将 Excel 中的这些条目转换为字符串,因此我正在寻找一种方法在 PHP 中将不正确的值转换为 13 位数字/字符串。

任何建议将不胜感激!

这是我正在使用的脚本示例:

 <?php
 // $data contains the rows returned from the CSV file:
 foreach ($data AS $k => $v) {
      /* $v['id_number'] is 8.88888E+12 but in the database it's stored correctly
       * as 888888111088. I need to match the imported value from the CSV to the row
       * in the database.
       * 
       * I need to convert 8.88888E+12 back to 888888111088.
       */
      if (strlen(str_replace(" ", "", $v['id_number'])) != 13) {
            $this->importValidateRules[$k] = "The ID number (" . $v['id_number'] . ") is invalid. It must be 13 characters long.";
      }
      // Continue with model validation:
 }
 ?>

【问题讨论】:

  • 如果被错误的保存为csv是不能做的。在记事本中打开它,看看它在平面文件中是如何表示的。如果它是 xls 或 xlsx 文件,您可以获得原始值。但没有一次错误地保存在 csv 中。
  • @RobbieChiha 谢谢你的反馈,我想了很多:(
  • 在 Excel 中使用字段类型,然后尝试重新导出为 CSV。也可以尝试使用PHPExcel,效果很好。
  • @MauritzSwanepoel 如果你想了解它的数学: 8.88888E+12 = 8.88888*10^12 = 8888880000000 这不会转换回完整的数字。唯一的方法是在保存之前将其作为 excel 中的文本字段。
  • 感谢您的反馈。感谢 Excel,我已经正式失去了 5 个小时的生命,哈哈。不幸的是,我必须在代码中进行验证,因为我不能依赖客户端在之前操作数据。我将在这里查看phpExcel作为答案!

标签: php excel csv numbers


【解决方案1】:

一般来说,将 ' 符号放在单元格中的数字之前可以强制 Excel 将值用作文本。如果您可以操作原始 xls 或要求用户在保存到 csv 之前执行此操作,它将起作用{例如有一个新列并放入 B1 单元格 =CONCATENATE("'",A1) } 从 csv+php 中“找出”将不起作用(精度已经丢失)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多