我正在使用 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>';
}
这是我的电子表格:
我要做的是遍历每一行,忽略空值并生成一个具有列名的对象。对于上图中的示例,第 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/