使用 PHPExcel 读取包含合并单元格的 excel sheet

Read excel sheet containing merged cells using PHPExcel

我想完整地阅读 excel sheet 并使用 AJAX 将每一行发送到另一页进行处理。因此,我使用以下代码将 excel sheet 数据转换为 JSON 数组(参考库中提供的 PHPExcel 示例):

<?php
error_reporting(E_ALL);
set_time_limit(0);

date_default_timezone_set('Asia/Kolkata');
set_include_path(get_include_path() . PATH_SEPARATOR . 'PHPExcel-1.8/Classes/');
require_once 'PHPExcel/IOFactory.php';

$inputFileType = PHPExcel_IOFactory::identify($fileLocation);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly("SHEETNAME");
$objPHPExcel = $objReader->load($fileLocation);

$data = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
?>

这里 $filelocation 是要读取的上传文件的位置,以便使用 AJAX 将行单独发送到另一个页面。 我在 javascript 中使用 $data 作为

DataToBeUploaded=<?php echo json_encode($data);?>;

但是 excel sheet 包含一些合并单元格,因此 PHPExcel 无法读取这些合并单元格中的值。因此,这些单元格中的值被读取为 NULL。

有没有一种方法可以将合并单元格的左上角单元格值用于所有后续单元格? (实际上在我的案例中,单元格仅垂直合并)

例如。 我有(假设行从 1 开始编号,列从 A 开始)

此处 PHPExcel 读取为:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]=''
$data[2][B]='456'

$data[3][A]=''
$data[3][B]='789'

我希望代码段产生这些值:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]='abc'
$data[2][B]='456'

$data[3][A]='abc'
$data[3][B]='789'

参考https://github.com/PHPOffice/PHPExcel/issues/643

我写了以下片段:

$referenceRow=array();
for ( $row = 2; $row <= $noOfBooks; $row++ ){
     for ( $col = 0; $col < 7; $col++ ){
         if (!$objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isInMergeRange() || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isMergeRangeValueCell()) {
             // Cell is not merged cell
             $data[$row][$col] = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->getCalculatedValue();

             $referenceRow[$col]=$data[$row][$col];  
             //This will store the value of cell in $referenceRow so that if the next row is merged then it will use this value for the attribute
          } else {
             // Cell is part of a merge-range
             $data[$row][$col]=$referenceRow[$col];  
             //The value stored for this column in $referenceRow in one of the previous iterations is the value of the merged cell
          }

      }
 }

这将给出完全符合要求的结果