当前位置: 首页 > 知识库问答 >
问题:

使用PHPExcel读取包含合并单元格的Excel工作表

庄新翰
2023-03-14

我想完全读取Excel表并使用AJAX将每一行发送到另一个页面进行处理。所以我使用了以下代码将excel表数据转换为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);
?>

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

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

但是excel工作表包含一些合并单元格,因此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'

共有1个答案

华星驰
2023-03-14

参考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
          }

      }
 }

这将完全按照要求给出结果

 类似资料:
  • 问题内容: 我有包含多个工作表的Excel文件,每个工作表看起来都像这样(但更长): 第一列实际上是四个垂直合并的单元格。 当我使用pandas.read_excel阅读此内容时,我得到一个看起来像这样的DataFrame: 如何让Pandas理解合并的单元格,或者快速方便地删除NaN并按适当的值分组?(一种方法是重置索引,逐步查找值并将NaN替换为值,传入天数列表,然后将索引设置为该列。但是似乎

  • 我正在构建一个函数,读取excel文件中可用的数据。 我在Spring项目中使用Apache POI。 但是,我在阅读合并单元格时遇到了困难。我需要的是得到如图所示的红色高亮显示的内容。

  • 问题内容: 还有其他方法可以使用Apache POI库在Excel中合并单元格? 我正在尝试使用以下内容,但无法正常工作 问题答案: 您可以使用 该示例将从B2合并到E2。请记住,它是基于零的索引(例如POI版本3.12)。 有关详细信息,请参见《BusyDeveloper指南》。

  • 我试着用下面的方法,但它不起作用

  • 这是我的excel表,其中包含一些空白单元格之间。所以我不能正确地阅读这张纸。所以,当读行时,当它在中间找到一个空白单元格时,列计数就会减少。

  • 本文向大家介绍PHPExcel简单读取excel文件示例,包括了PHPExcel简单读取excel文件示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHPExcel简单读取excel文件的方法。分享给大家供大家参考,具体如下: PHP Excel 2007 classes Project providing a set of classes for the PHP programmi