PHPExcel:将多个具有样式的文件(或工作表)合并到一个工作表中

PHPExcel:将多个具有样式的文件(或工作表)合并到一个工作表中,php,phpexcel,Php,Phpexcel,我想合并多个excel文件(file1.xls;file2.xls)。两者具有相同的列数和相同类型的列标题 我找到了一个组合数据()的解决方案。但是我想复制样式(不同的文件有不同的背景) $tempXlsFiles=[ 存储路径(“导出”)。“/file1.xls”, 存储路径(“导出”)。“/file2.xls” ]; $objPHPExcel1=PHPExcel_IOFactory::load($tempXlsFiles[0]); 对于($i=1;$igetActiveSheet()->ge

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

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

$tempXlsFiles=[
存储路径(“导出”)。“/file1.xls”,
存储路径(“导出”)。“/file2.xls”
];
$objPHPExcel1=PHPExcel_IOFactory::load($tempXlsFiles[0]);
对于($i=1;$igetActiveSheet()->getHighestRow();
$findEndDataColumn=$objPHPExcelToCopy->getActiveSheet()->getHighestColumn();
$findEndData=$findEndDataColumn.$findEndDataRow;
$beeData=$objPHPExcelToCopy->getActiveSheet()->rangeToArray('A2:'。$findEndData);
//在第一个电子表格中确定要开始的行
//添加合并的蜜蜂数据而不覆盖任何鸟类数据
$appendStartRow=$objPHPExcel1->getActiveSheet()->getHighestRow()+1;
//将PHP数组中的bee数据添加到bird数据中
$objPHPExcel1->getActiveSheet()->fromArray($beeData,null,'A'.$appendStartRow);
//如何添加样式?
}
//使用合并的数据保存电子表格
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel1,'Excel2007');
$objWriter->save(存储路径('exports')./'.$outputFile);
PS:我使用LaravelExcel和PhpExcel

编辑:

  • file1.xls有10行。此行的背景为红色
  • file2.xls有5行。背景是蓝色的
我想: 文件_merge.xls:有15行。0到10:背景红色,包含文件1的数据。10至15:蓝色背景的文件2数据。
(这是一个示例,我不知道什么背景有文件。)

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

//示例样式:边框样式:边框 $objPHPExcel->getActiveSheet()->getStyle('A'.$i.')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::Border_THIN)


希望这有帮助

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

PHPExcel有一个专门的方法(
addExternalSheet()
)来实现这一目的,甚至提供了


对不起,我想把所有文件都放在同一张纸上。我不希望1个文件=1张工作表。然后您需要自己编写代码逻辑来复制样式信息;PHPExcel没有任何魔力来提供这种特殊要求,而且由于文件之间的样式ID可能不同,因此最好还是使用我指出的方法将所有数据和样式同步到一个工作簿中(跨多个工作表)然后将数据和样式合并到一个工作表中,作为第二步,使用duplicateStyle()复制样式,因为它们已经同步,并且都存在于一个工作簿中谢谢,但我想使用相同样式的file1.xls和file2.xls设置样式。我编辑了我的帖子来解释
        $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);
$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");