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

如何在PHPExcel中遍历行列并生成指定格式的对象?

PHPExcel遍历Excel生成指定格式对象:解决方案

当然可以实现你想要的效果!咱们来调整你的现有代码,让它能忽略空值,并生成带有列名的目标对象结构。

先明确需求对应逻辑

从你给出的示例{HVHV001OXLG:{ A5AR:"152", A5AM:"988", A5AL:"100" } }来看:

  • 外层键(比如HVHV001OXLG)是每行的第一个单元格值
  • 内层的键(A5AR/A5AM/A5AL)是表格的列名(表头)
  • 只保留非空的列值

修改后的完整代码

try {
    $inputfiletype = PHPExcel_IOFactory::identify($inputfilename);
    $objReader = PHPExcel_IOFactory::createReader($inputfiletype);
    $objPHPExcel = $objReader->load($inputfilename);
    $r = array('d' => true);
} catch(Exception $e) {
    die('Error loading file "'.pathinfo($inputfilename,PATHINFO_BASENAME).'": '.$e->getMessage());
    $r = array('d' => false);
}

// 获取第一个工作表
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

// 👇 这里需要根据你的实际表格调整!假设表头在第4行,数据从第5行开始
$headerRow = 4;
// 读取表头列名数组
$headerData = $sheet->rangeToArray('A' . $headerRow . ':' . $highestColumn . $headerRow, NULL, TRUE, FALSE)[0];

// 存储最终结果的数组
$result = [];

// 遍历所有数据行(从表头的下一行开始)
for ($row = $headerRow + 1; $row <= $highestRow; $row++) {
    // 读取当前行的所有数据
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE)[0];
    
    // 获取当前行的外层标识键(示例中的HVHV001OXLG)
    $outerKey = $rowData[0];
    if (empty($outerKey)) {
        continue; // 跳过外层键为空的行
    }
    
    // 构建当前行的键值对,过滤空值
    $rowObject = [];
    foreach ($headerData as $index => $columnName) {
        $cellValue = $rowData[$index];
        // 跳过外层键对应的列,并且只保留非空值
        if (!empty($cellValue) && $index !== 0) {
            $rowObject[$columnName] = $cellValue;
        }
    }
    
    // 如果当前行有有效数据,就加入结果数组
    if (!empty($rowObject)) {
        $result[$outerKey] = $rowObject;
    }
}

// 可以输出JSON格式查看结果,和你想要的结构一致
echo json_encode($result, JSON_PRETTY_PRINT);

关键说明

  1. 表头行调整:你需要根据自己的实际表格修改$headerRow的值——如果你的列名(A5AR这些)在第1行,就把$headerRow改成1,数据行从第2行开始遍历。
  2. 空值过滤:代码里通过!empty($cellValue)判断,会自动跳过空的单元格,不会出现在最终的对象里。
  3. 外层键处理:如果某行的第一个单元格是空的,会直接跳过整行,避免无效数据。

另外提一句:PHPExcel已经停止维护很多年了,后续如果有机会,建议迁移到它的继任者PhpSpreadsheet,API用法基本一致,但兼容性和功能更新更有保障。

内容的提问来源于stack exchange,提问作者Gaz Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:27:50