当前位置: 首页 > news >正文

php将身份证号写入excel文件出现科学计数法问题解决

        在 PHP 中生成 Excel 文件并处理身份证号时,通常使用 PHPExcel 或其继任者 PhpSpreadsheet 库。身份证号通常是以字符串形式存储的,但在某些情况下,如果身份证号很长(例如,超过 15 位数字),在 Excel 中可能会以科学计数法(如:4.77887E+17)显示。为了避免这种情况,我们需要确保在写入数据时将其作为文本格式处理。

        以下是如何使用 PhpSpreadsheet 库来生成 Excel 文件,并确保身份证号不会以科学计数法显示:

  1. 安装 PhpSpreadsheet

    如果你还没有安装 PhpSpreadsheet,可以通过 Composer 安装:

    composer require phpoffice/phpspreadsheet

  2. 创建并保存 Excel 文件

    使用以下 PHP 代码来创建一个 Excel 文件,并确保身份证号作为文本格式写入:

    <?php
    
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use think\facade\Filesystem;
    use think\facade\Request;
    use PhpOffice\PhpSpreadsheet\IOFactory;
    use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
    
    
    /**
     * 写入excel文件信息  并去除身份证科学计数法
     *
     * @param $data  文件内容
     * @param $title 文件名称前缀
     * @param $savePath 文件存储路径
     * @return string 生成的文件地址
     * @throws \PHPExcel_Exception
     * @throws \PHPExcel_Reader_Exception
     * @throws \PHPExcel_Writer_Exception
     */
    function writerXls($data, $title, $savePath='')
    {
        $objPHPExcel = new Spreadsheet();
        $filename = $title . '-' . date('YmdHis') . '.xls';
        $objPHPExcel->createSheet();
        $objPHPExcel->setActiveSheetIndex(0); //设置第一个工作表为活动工作表
        $objPHPExcel->getActiveSheet()->setTitle('sheet1'); //设置工作表名称
    
        $sheet = $objPHPExcel->getActiveSheet();
    
        foreach ($data as $k => $val) {
            foreach ($val as $i => $v) {
                // 将列索引转换为字母(如 1 -> A, 2 -> B, 3 -> C)
                $colLetter = Coordinate::stringFromColumnIndex($i + 1);
                // 动态生成单元格坐标(如 A1, B2, C3 等)
                $cellCoordinate = $colLetter . ($k + 1);
    
                // 如果是身份证号列,强制存储为文本
                if ($i >= 0) {//都存储为字符串型  此处可设置哪些列设置为字符串类型 判断$i列值即可
                    $sheet->setCellValueExplicit($cellCoordinate, $v, 'str');
                } else {
                    $sheet->setCellValue($cellCoordinate, $v);
                }
    
            }
        }
    
        foreach ($data[0] as $k => $val) {
            in_array($k, array(0, 6)) ? $objPHPExcel->getActiveSheet()->getColumnDimension(chr($k + 65))->setWidth(30) :
                $objPHPExcel->getActiveSheet()->getColumnDimension(chr($k + 65))->setWidth(25);
        }
    
        //输出
        $objWriter = IOFactory::createWriter($objPHPExcel, 'Xls');
    
        if(!$savePath){
             $savePath = '/runtime/storage/upload/error';
        }
        //创建文件夹
        if (!file_exists($savePath)) {
            mkdir($savePath,0777,true);
        }
    
        $objWriter->save($savePath . '/' . $filename);
        unset($objPHPExcel);
    
        return $savePath . '/' . $filename;
    }
    
    ?>
    
    <?php
        // 示例数据
        $data = [
            ['姓名', '身份证号', '手机号'],
            ['张三', '123456789012345678', '13800138000'],
            ['李四', '987654321098765432', '13900139000'],
        ];
        //调用生成xsl文件函数
        $excel_url = writerXls($data, 'id_numbers',  '/download/idcard');
    ?>
  3. 运行代码

    运行上述 PHP 脚本后,你将得到一个名为 id_numbers-20250313******.xls 的 Excel 文件,其中身份证号不会以科学计数法显示。每个身份证号都会被正确识别为文本格式。

        通过以上步骤,你可以确保在生成的 Excel 文件中,所有的身份证号都不会被错误地以科学计数法显示。


文章转载自:

http://frtomB1z.fnpyk.cn
http://2shvQjSC.fnpyk.cn
http://GegW8y56.fnpyk.cn
http://80aa3bX6.fnpyk.cn
http://1zUSUkXE.fnpyk.cn
http://KuU8clfo.fnpyk.cn
http://kNSWTgEX.fnpyk.cn
http://0HbHPB9Q.fnpyk.cn
http://g3FpzeHn.fnpyk.cn
http://hrbI27Yi.fnpyk.cn
http://gJw9mWaV.fnpyk.cn
http://4yM4orlj.fnpyk.cn
http://LIjybvwL.fnpyk.cn
http://s6sgH0tz.fnpyk.cn
http://eHHWTeoJ.fnpyk.cn
http://dFFevwNU.fnpyk.cn
http://MnjX8qCN.fnpyk.cn
http://JGlzgYts.fnpyk.cn
http://v9V47qax.fnpyk.cn
http://dNFKEbHx.fnpyk.cn
http://qIUNyVEc.fnpyk.cn
http://qsFBVsRU.fnpyk.cn
http://3WfJw3ZH.fnpyk.cn
http://breAY6f8.fnpyk.cn
http://uKvzCPAw.fnpyk.cn
http://6poeuEM6.fnpyk.cn
http://VEferwSL.fnpyk.cn
http://W5UoTvqp.fnpyk.cn
http://KqXJfJsJ.fnpyk.cn
http://wcZmzI2j.fnpyk.cn
http://www.dtcms.com/a/66003.html

相关文章:

  • 详解CPU的组成与功能
  • leetcode hot100贪心
  • 使用自动导入后,eslint报错 eslint9
  • CCF CSP 第30次(2023.09)(1_坐标变换_C++)(先输入再计算;边输入边计算)
  • Xshell连接autodl时提示ssh服务器拒绝了密码,请再试一次
  • 【大模型学习】第十九章 什么是迁移学习
  • 微店关键词搜索商品详情API接口解析与应用
  • C++双端队列知识点+习题
  • ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)
  • 【vue3学习笔记】(第144-146节)reactive函数;回顾vue2响应式原理;vue3响应式原理_proxy
  • 问deepseek: k-epsilon湍流模型,公式原理推导
  • 【基于ESP32-S3的多线程工业级温度监测系统】
  • 【业务场景实战】数据增量同步
  • 【计算机网络 第8版】谢希仁编著 第一章概述 课后题10、11、28、34解析
  • 使用 Arduino 和 ESP8266 Wi-Fi 模块发送电子邮件
  • python字符串练习题
  • 【QT】-一文读懂抽象类
  • 限流及熔断的场景?
  • 星越L_ 常规车门解锁方式讲解
  • C#中类‌的核心定义
  • git备份or打补丁
  • TCP为什么可靠?
  • Gartner发布量子网络安全策略指南:2030年量子计算将能够破坏传统的加密算法
  • 每日十题八股-2025年3月13日-关于垃圾回收的笔记
  • 【后端开发面试题】每日 3 题(十二)
  • 用 Qt 动画制作炫酷的界面效果:属性动画教程
  • SSM基础专项复习4——Maven项目管理工具(1)
  • 小记一下Zookeeper配置中心的部分原理
  • 使用服务器如何DNS呢
  • 【eNSP实战】基本ACL实现网络安全