使用PHPSpreadsheet加载XLS文件时触发行列整数错误
处理PHPSpreadsheet加载XLS文件时的行/列ID错误问题
问题描述
加载Excel 97-2003格式(XLS)的表格时触发错误:
Error 0 on line 49 in \PhpSpreadsheet\Cell\CellAddress.php -> Row and Column Ids must be positive integer values
该表格共14列,无公式或外部引用,同格式其他文件可正常加载。尝试将表格内容复制到新文件后能正常加载,但删除表头手动输入单行数据仍会触发相同错误,问题出在原文件本身。
加载代码如下:
require 'PHPSpreadsheet/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Reader\Xlsx; $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); $spreadsheet = $reader->load($inputfile); // <-- 此处加载失败
表格表头及示例数据:
DATE Course ID Title of Class StartTime PGH Location Address City State Zip Code Sponsor/Vendor Instructor if Known Contact Information Telephone 1/10/2023 7280801 Dual Credit Water & Wastewater Workshop 08:00 6 Anywhere Fire Department 123 Main St Any Town NC 28580 NC Statewide Safety Conference, Inc. Sam Smith Joe Smith 252-555-1212
解决方案
1. 修复文件结构
- 用Excel打开故障文件,选择「另存为」→「Excel 97-2003工作簿(*.xls)」,在保存选项中勾选「删除个人信息」,覆盖原文件后重新加载。
- 若Excel修复无效,改用LibreOffice Calc打开文件,再另存为XLS格式,它对损坏文件的兼容性修复能力更强。
2. 修改加载代码,跳过无效内容
开启只读模式并忽略空单元格,能规避部分格式异常导致的错误:
require 'PHPSpreadsheet/autoload.php'; use PhpOffice\PhpSpreadsheet\Reader\Xls; $reader = new Xls(); // 只读模式,只加载数据不处理格式,减少错误概率 $reader->setReadDataOnly(true); // 忽略空单元格,跳过无效的空区域 $reader->setIgnoreEmptyCells(true); try { $spreadsheet = $reader->load($inputfile); // 后续业务逻辑 } catch (\Exception $e) { echo '加载失败: ' . $e->getMessage(); }
3. 清除无效单元格区域
打开故障文件,按Ctrl+End定位到表格的最后一个单元格,检查是否存在超出实际数据范围的空单元格或格式异常单元格,删除这些无效区域后保存文件再尝试加载。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

