codeigniter 如何在PhpSpreadsheet中读取合并单元格中的值

2exbekwf  于 2022-12-07  发布在  PHP
关注(0)|答案(2)|浏览(174)
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
 $spreadsheet = $reader->load($_FILES['mapping_file']['tmp_name']);
 $sheetData = $spreadsheet->getActiveSheet()->toArray();

这是我从php中读取excel数据的代码,使用PhpSpreadsheet,返回的是数组。但是合并单元格时,只返回合并单元格处的单个值,另一个值为空。

eblbsuwk

eblbsuwk1#

// loop to fill empty value from merged cells //
        for($i=0; $i<count($DuplicatedSheetData);$i++){
            // explode merge cells range //
            $CellIndex = explode(":", $DuplicatedSheetData[$i]);

            // get main cell with value, ex N25:N27 , the value only stored in N25 //
            $CellValue = $spreadsheet->getActiveSheet()->getCell($CellIndex[0])->getValue();

            // starting index //
            $StartIndex = (int) substr($CellIndex[0],1,2);

            // ending index // 
            $EndIndex = (int) substr($CellIndex[1],1,2);
            
            // column name example "A" ,"B" //
            $ColumnName = substr($CellIndex[0],0,1);      
            
            // loop to copy the value from main cell, to other cell //
            for($j = $StartIndex;$j <= $EndIndex; $j++){
                $spreadsheet->getActiveSheet()->setCellValue($ColumnName.$j , $CellValue);
            }

        }

        // map to array and remove empty value //
        $sheetData = $spreadsheet->getActiveSheet()->toArray();
        $sheetData = array_values(array_map('array_filter', $sheetData));

基本上,我只是将主值复制到范围中没有值的其他单元格中。

w1e3prcc

w1e3prcc2#

我遇到了同样的问题,我发现单元格没有被读取,而是第一个单元格(带有值)。要解决这个问题,请创建一个PhpOffice\PhpSpreadsheet\Reader\Xls的副本,并将合并单元格的readMergedCells()更改为readDefault()。

相关问题