我正在尝试从模板文件中的一系列单元格中复制样式,并将其粘贴到另一个文件中的另一个单元格区域,然后保存生成的文件。在我完全实现之前,我在Excel文件的一小部分上进行了实验,但我发现了一个奇怪的结果。
这是我的代码段...
include "../class/PHPExcel.php";
include "../class/PHPExcel/IOFactory.php";
include "../class/PHPExcel/Cell.php";
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$frTemplate = $reader->load("document/Template/FR-001 Template.xlsx");
$frTemplate->setActiveSheetIndex(0);
$frTemplate->getActiveSheet()->setCellValueExplicitByColumnAndRow(3, 6, $year);
//copy style
$cellStyle = $frTemplate->getActiveSheet()->getStyle('E47:E49');
$frTemplate->getActiveSheet()->duplicateStyle($cellStyle, 'E52:E54');
//copy value
$cellValues = $frTemplate->getActiveSheet()->rangeToArray('E47:E49');
$frTemplate->getActiveSheet()->fromArray($cellValues, null,'E52');
$writer = PHPExcel_IOFactory::createWriter($frTemplate, "Excel2007");
$writer->save("document/Template/FR-001 2017.xlsx");
echo "Done";
以下是复制的Excel文件的图像...
这是目标文件的图像......
我正在尝试将代码应用于其他数据,我发现 -
可悲的是,我无法发布上述案例的证据,因为我的声誉仍然非常低(这是我在Stack Overflow中的第一个问题!)
那么,你能告诉我我的代码有什么问题吗?提前谢谢。
答案 0 :(得分:0)
这是正确的:
"Merge cell"
不是风格的一个方面;它是工作表structure
的一部分,因此不能被duplicateStyle“复制”。如果要合并单元格,则需要对要设置的每个合并范围使用mergeCells()
方法。
duplicateStyle()
方法将样式复制到一系列单元格;它不会将多个样式复制到新范围。 getStyle()
方法允许范围用于针对该范围内的所有单元格设置样式,但仅返回该范围内第一个单元格的样式。您需要将每个不同的样式复制到其自己的范围。