如何使用PHPExcel将XLS文件读取为多维数组?(附尝试代码)
关于PHPExcel读取XLS/XLSX为多维数组的实现确认与优化方案
嘿,你的代码思路是完全正确的!核心逻辑——加载Excel文件、遍历工作表并通过toArray()转换为数组的方向没问题,但有几个细节可以优化,同时补充一些健壮性处理,让代码更可靠:
先说说你的代码里需要注意的点
- 如果你的目标文件是
.xls(Excel 97-2003格式),那你当前用的Excel2007Reader是不对的,应该改用Excel5;如果是.xlsx,那当前的Reader是正确的。更灵活的方式是让PHPExcel自动识别文件类型,不用手动指定。 - 缺少错误处理:比如文件不存在、权限不足、Excel文件损坏的情况,没有捕获异常,容易导致脚本报错中断。
toArray()方法有默认参数,你可以根据需求调整,比如是否保留空单元格、设置空单元格的默认值。
完善后的正确实现方案
下面是兼顾兼容性和健壮性的代码(基于你用的CakePHP环境):
// 引入PHPExcel(CakePHP的Vendor引入方式) App::import('Vendor', 'PHPExcel', array('file' => 'PHPExcel.php')); // Excel文件路径 $excelFile = DAY_DIR . "/data.xlsx"; // 初始化结果数组 $arrayData = []; try { // 自动识别Excel文件类型,获取对应的Reader $fileType = PHPExcel_IOFactory::identify($excelFile); $objReader = PHPExcel_IOFactory::createReader($fileType); // 加载Excel文件 $objPHPExcel = $objReader->load($excelFile); // 遍历所有工作表 foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { // toArray参数说明: // 参数1:是否忽略空单元格(默认false,即保留空值) // 参数2:设置空单元格的默认值(默认null) // 参数3:是否将单元格的公式计算结果作为值,而不是公式本身(默认true) $sheetData = $worksheet->toArray(null, true, true, true); // 以工作表标题为键,存储该表的数组数据 $arrayData[$worksheet->getTitle()] = $sheetData; } // 这里可以打印结果验证 // print_r($arrayData); } catch (Exception $e) { // 捕获错误并处理 die('读取Excel文件失败: ' . $e->getMessage()); }
额外说明
- 如果你的PHPExcel版本较新,注意命名空间的问题(不过老版本的PHPExcel一般没有命名空间,你的引入方式是对的)。
- 如果你不需要遍历所有工作表,只想读取第一个工作表,可以用
$objPHPExcel->getActiveSheet()直接获取,然后调用toArray()。 - 确保服务器上的PHP环境开启了必要的扩展,比如
php_zip(读取xlsx需要)、php_xml等,否则可能会读取失败。
内容的提问来源于stack exchange,提问作者Rich5757
相关产品推荐
相关产品推荐

