PHPExcel 复制样式仅复制第一个单元格,即使给出单元格范围也是如此
PHPExcel duplicate style only duplicate the first cell even when range of cell is given
我正在尝试从模板文件中的一系列单元格复制样式并将其粘贴到另一个文件中的另一单元格范围,然后保存生成的文件。在我完全实现它之前,我在 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 文件的图像...
Copied File-Case 1
这是目标文件的图片...
Result-Case 1
我正在尝试将代码应用于其他数据,我发现 -
- "Merge cell"样式无法复制
- 复制一系列单元格时,唯一复制的样式是第一个单元格(左上角)
遗憾的是,我无法post上述案例的证据,因为我的声誉仍然很低(这是我在 Stack Overflow 中的第一个问题!)
所以,你能告诉我我的代码有什么问题吗?提前致谢。
正确:
"Merge cell"
不是样式的一个方面;它是工作表 structure
的一部分,因此它不能是 "copied" by duplicateStyle。如果要合并单元格,需要对每个要设置的合并范围使用mergeCells()
方法
duplicateStyle()
方法将样式复制到一系列单元格;它不会将多种样式复制到新范围。 getStyle()
方法允许一个范围,目的是针对该范围内的所有单元格设置样式,但仅 returns 该范围内第一个单元格的样式。您需要将每个不同的样式复制到它自己的范围内。
我正在尝试从模板文件中的一系列单元格复制样式并将其粘贴到另一个文件中的另一单元格范围,然后保存生成的文件。在我完全实现它之前,我在 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 文件的图像...
Copied File-Case 1
这是目标文件的图片...
Result-Case 1
我正在尝试将代码应用于其他数据,我发现 -
- "Merge cell"样式无法复制
- 复制一系列单元格时,唯一复制的样式是第一个单元格(左上角)
遗憾的是,我无法post上述案例的证据,因为我的声誉仍然很低(这是我在 Stack Overflow 中的第一个问题!)
所以,你能告诉我我的代码有什么问题吗?提前致谢。
正确:
"Merge cell"
不是样式的一个方面;它是工作表 structure
的一部分,因此它不能是 "copied" by duplicateStyle。如果要合并单元格,需要对每个要设置的合并范围使用mergeCells()
方法
duplicateStyle()
方法将样式复制到一系列单元格;它不会将多种样式复制到新范围。 getStyle()
方法允许一个范围,目的是针对该范围内的所有单元格设置样式,但仅 returns 该范围内第一个单元格的样式。您需要将每个不同的样式复制到它自己的范围内。