在 PHP 中生成 Excel 文件并处理身份证号时,通常使用 PHPExcel 或其继任者 PhpSpreadsheet 库。身份证号通常是以字符串形式存储的,但在某些情况下,如果身份证号很长(例如,超过 15 位数字),在 Excel 中可能会以科学计数法(如:4.77887E+17)显示。为了避免这种情况,我们需要确保在写入数据时将其作为文本格式处理。
以下是如何使用 PhpSpreadsheet 库来生成 Excel 文件,并确保身份证号不会以科学计数法显示:
安装 PhpSpreadsheet
如果你还没有安装 PhpSpreadsheet,可以通过 Composer 安装:
composer require phpoffice/phpspreadsheet
创建并保存 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'); ?>
运行代码
运行上述 PHP 脚本后,你将得到一个名为
id_numbers-20250313******.xls
的 Excel 文件,其中身份证号不会以科学计数法显示。每个身份证号都会被正确识别为文本格式。
通过以上步骤,你可以确保在生成的 Excel 文件中,所有的身份证号都不会被错误地以科学计数法显示。