PHPExcel复制样式仅复制第一个单元格,即使给定单元格范围

时间:2017-05-24 06:00:26

标签: php phpexcel

我正在尝试从模板文件中的一系列单元格中复制样式,并将其粘贴到另一个文件中的另一个单元格区域,然后保存生成的文件。在我完全实现之前,我在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

我正在尝试将代码应用于其他数据,我发现 -

  • “合并单元格”样式无法复制
  • 复制一系列单元格时,复制的唯一样式是第一个单元格(左上角)

可悲的是,我无法发布上述案例的证据,因为我的声誉仍然非常低(这是我在Stack Overflow中的第一个问题!)

那么,你能告诉我我的代码有什么问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是正确的:

"Merge cell"不是风格的一个方面;它是工作表structure的一部分,因此不能被duplicateStyle“复制”。如果要合并单元格,则需要对要设置的每个合并范围使用mergeCells()方法。

duplicateStyle()方法将样式复制到一系列单元格;它不会将多个样式复制到新范围。 getStyle()方法允许范围用于针对该范围内的所有单元格设置样式,但仅返回该范围内第一个单元格的样式。您需要将每个不同的样式复制到其自己的范围。