PhpSpreadsheet - 在不迭代每个单元格的情况下获取行

Posted

技术标签:

【中文标题】PhpSpreadsheet - 在不迭代每个单元格的情况下获取行【英文标题】:PhpSpreadsheet - get row without iterating on each cell 【发布时间】:2018-09-10 19:35:39 【问题描述】:

我正在使用 phpSpreadsheet 轻松地从 xls 文档中读取并在一些计算后插入到数据库中。我成功地使用了文档中的示例,但我发现它太复杂了,我确定我错过了一些东西,而且可以更轻松地完成。

$worksheet = $this->getWorksheet("file.xls");
foreach ($worksheet->getRowIterator() as $row) 
  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(FALSE);
  foreach ($cellIterator as $key => $cell) 
    $cellValue = $cell->getValue();

    if($key == 'A')
      $field1 = $cellValue;
    if($key == 'B') 
      $dateTime = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($cellValue);
      $date = $dateTime->format("Y-m-d");
    
    if($key == 'C')
      $field2 = $cellValue;
    if($key == 'D')
      $field3 = $cellValue;
    if($key == 'E')
      $field4 = $cellValue;
  

我本来希望像 $row->getCell("A")->getValue() 这样的东西可用。

所以...我错过了什么吗?

【问题讨论】:

【参考方案1】:

这是我发现的

        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        $spreadsheet = $reader->load("test.xlsx");
        $sheet = $spreadsheet->getSheet(0);

        $nb = 0;

        foreach ($sheet->getRowIterator() as $row) 

            echo $sheet->getCell("A$nb")->getValue();
            echo "<hr>";
            
            $nb++;
        

【讨论】:

【参考方案2】:

请参阅docs 直接按列和行获取值而不是测试键

从例子:

// Get the value from cell B5
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(2, 5)->getValue();

希望有帮助

【讨论】:

嗨,谢谢,但我看到了这种方法,但它对我没有帮助 - 我需要获取每一行。所以使用这种方法,我想做的一种方法是使用for循环而不是getRowIterator,然后使用getCellByColumnAndRow,将循环的当前索引作为行......但我觉得它很漂亮也惨淡。不是理想的解决方案。

以上是关于PhpSpreadsheet - 在不迭代每个单元格的情况下获取行的主要内容,如果未能解决你的问题,请参考以下文章

如何在不安装的情况下使用 PhpSpreadsheet(如 PHPExcel)

详解PhpSpreadsheet设置单元格

如何使用 PhpSpreadsheet 从表格单元格中检索日期?

如何在 PHPSpreadsheet 中更改单元格颜色

PhpSpreadsheet 将单元格的背景颜色设置为白色

PHPOffice/PhpSpreadsheet 获取单元格列索引为整数