我想组合多个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。
编辑:
我想: file_merge.xls:有15行。 0到10:背景RED与文件1的数据.10到15:具有蓝色背景的文件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");