php - 循环遍历 PHPExcel 中的列和行以创建对象

标签 php excel

我正在使用 PHPExcel 库循环浏览我的 excel 电子表格。这是我当前的脚本:

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 );
}

//  Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn();

//  Loop through each row of the worksheet in turn
for ($row = 1; $row <= $highestRow; $row++)
{ 
    //  Read a row of data into an array
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
    echo $rowData[0][0] . '</br>';

}

这是我的电子表格:

enter image description here

我要做的是遍历每一行,忽略空值并生成一个具有列名的对象。对于上图中的示例,第 5 行将产生:
{HVHV001OXLG:{
           A5AR:"152",
           A5AM:"988",
           A5AL:"100"
}
}

是否可以从我的电子表格格式中生成类似的内容?

最佳答案

读取第 1 行以获取列标题列表;这提供了一个航向图。将第 5 个参数用于 rangeToArray() 可能是个好主意。这样您就可以获得按行/列号索引的数组,因此您可以使用列地址轻松查找 map 。

然后循环遍历第 2 行的数据行,再次返回一个行/列索引数组,以便您可以轻松检查标题映射,测试包含值的单元格,并根据列标题查找它们的列地址。

就像是:

$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn();

$columnLoopLimiter = $highestColumn;
++$columnLoopLimiter;
// get the column headings as a simple array indexed by column name
$headings = $sheet->rangeToArray('A1:' . $highestColumn . 1, NULL, TRUE, FALSE, TRUE)[1];

//  Loop through each data row of the worksheet in turn
for ($row = 2; $row <= $highestRow; $row++)
{ 
    //  Read a row of data into an array
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE, TRUE);
    echo $rowData[$row]['A'], '</br>';
    for ($column = 'B'; $column !== $columnLoopLimiter; ++$column) {
        if (!empty($rowData[$row][$column])) {
            echo $headings[$column], ':', $rowData[$row][$column], '</br>';
        }
    }
}

注意 $column !== $columnLoopLimiter; , 我增加了 $columnLoopLimiter之前到最后一列之后的列,以便我们可以执行 !==比较而不是 <= .这利用了 PHP 的 perl 风格的字符增量器,但确保我们在增量器从 Z 循环到 AA 时进行干净的比较。

关于php - 循环遍历 PHPExcel 中的列和行以创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167227/

相关文章:

php - 从数组中删除键=>值对,但不删除它们

sql - 如何在 SQL Server 中截断一定数量的字符后的结果

excel - Symfony 返回导出 excel 的响应

excel - Word VBA 解决复制粘贴到 Excel 时的换行或段落标记问题

excel - 如何将分类值转换为 Excel 中的列?

php - Symfony 自动解析 Controller ,无需注册为服务

PHP 5.4 和 Facebook Hiphop 兼容性

php - 如何在 php 中将 0111 算作 0+1+1+1=3

php - 在 ajax 调用中使用 TCPDF 生成 PDF

excel - 根据搜索条件创建行名列表