You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:24:01