PHPExcel:将多个文件(或工作表)与样式合并为一个工作表

时间:2017-01-26 08:48:26

标签: php phpexcel

我想组合多个excel文件(file1.xls; file2.xls)。两者都具有相同数量的列和相同类型的列标题。

我找到了一种组合数据的解决方案(enter link description here)。但我想复制样式(我有不同文件的背景)。

        $tempXlsFiles = [
            storage_path('exports') . "/file1.xls",
            storage_path('exports') . "/file2.xls"
        ];

        $objPHPExcel1 = PHPExcel_IOFactory::load($tempXlsFiles[0]);

        for($i=1;$i < sizeof($tempXlsFiles); $i++){
            $objPHPExcelToCopy = PHPExcel_IOFactory::load($tempXlsFiles[$i]);

            // Find the last cell in the second spreadsheet
            $findEndDataRow = $objPHPExcelToCopy->getActiveSheet()->getHighestRow();
            $findEndDataColumn = $objPHPExcelToCopy->getActiveSheet()->getHighestColumn();
            $findEndData = $findEndDataColumn . $findEndDataRow;

            $beeData = $objPHPExcelToCopy->getActiveSheet()->rangeToArray('A2:' . $findEndData);

            // Identify the row in the first spreadsheet where we want to start
            // adding merged bee data without overwriting any bird data
            $appendStartRow = $objPHPExcel1->getActiveSheet()->getHighestRow() + 1;
            // Add bee data from the PHP array into the bird data
            $objPHPExcel1->getActiveSheet()->fromArray($beeData, null, 'A' . $appendStartRow);


            // How can i to add the style ?

        }
        // Save the spreadsheet with the merged data
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007');
        $objWriter->save(storage_path('exports').'/'.$outputFile);

PS:我使用的是LaravelExcel和PhpExcel。

编辑:

  • file1.xls有10行。此行具有背景RED
  • file2.xls有5行。有背景蓝色

我想: file_merge.xls:有15行。 0到10:背景RED与文件1的数据.10到15:具有蓝色背景的文件2的数据。 (例如,我不知道文件的背景是什么。)

2 个答案:

答案 0 :(得分:0)

您可以在for循环中添加此样式,并根据需要添加单元格(A1,A2 ...,B1,B2 ......)。

//样本样式:边框样式:BORDER_THIN $ objPHPExcel-&GT; getActiveSheet() - &GT;对getStyle(&#39; A&#39; $ I&#39;&#39;。。) - &GT; getBorders() - &GT; getAllBorders() - &GT; setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN);

希望这有帮助!

答案 1 :(得分:0)

您的代码只是从一个工作簿中读取工作表数据值的数组,并在另一个工作簿中设置这些值;它永远不会复制样式。

PHPExcel有一个特殊的方法(addExternalSheet())用于此目的,甚至提供an example of using it (43mergeWorkbooks.php in /Examples)

$objPHPExcel1 = PHPExcel_IOFactory::load("templates/43mergeBook1.xlsx");

$objPHPExcel2 = PHPExcel_IOFactory::load("templates/43mergeBook2.xlsx");

foreach($objPHPExcel2->getSheetNames() as $sheetName) {
    $sheet = $objPHPExcel2->getSheetByName($sheetName);
    $sheet->setTitle($sheet->getTitle() . ' copied');
    $objPHPExcel1->addExternalSheet($sheet);
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007');
$objWriter->save("merged_with_styles.xlsx");