如何使用PhpSpreadsheet读取自定义格式Excel并提取指定列为数组
是的,你完全可以使用PhpSpreadsheet读取Excel中指定的「Double」列并转换为数组。你当前代码无法正常运行的核心原因是:toArray()方法返回的是索引二维数组,每一行的元素下标为数字,无法直接通过列名Double作为键名取值。
修正方案
首先从表格首行提取表头,找到「Double」列对应的索引,再遍历数据行按索引取值即可,修正后的完整代码如下:
public function readExcelData($fileName, $tmpName) { // 匹配对应格式的读取器 $extension = pathinfo($fileName, PATHINFO_EXTENSION); if ($extension == 'csv') { $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv(); } elseif ($extension == 'xlsx') { $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); } else { $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); } // 仅加载Planning工作表 $reader->setLoadSheetsOnly(["Planning"]); $spreadSheet = $reader->load($tmpName); $sheetData = $spreadSheet->getActiveSheet()->toArray(); // 空表直接返回 if (empty($sheetData)) { return []; } // 提取表头查找Double列的索引 $headerRow = array_shift($sheetData); $doubleColIndex = array_search('Double', $headerRow); if ($doubleColIndex === false) { throw new \Exception('目标表格不存在Double列'); } $fetchData = []; foreach ($sheetData as $row) { $fetchData[] = [ 'double' => $row[$doubleColIndex] ?? null ]; } return $fetchData; }
补充说明:原代码中的for循环存在数组越界风险,改为foreach遍历更稳妥,同时新增了空表、列不存在的异常处理逻辑,避免代码无征兆报错。
内容的提问来源于stack exchange,提问作者Erix Syaiful Rohman
相关产品推荐
相关产品推荐

