我尝试在此处和 PHPExcel 官方文档/论坛中检查所有可能的类似解决方案,但我没有找到任何解决我的问题的方法。
问题
我试图clone(或者诚实地说,复制)一张表将其解析为通过 phpexcel 创建的另一个文件保持克隆工作表的样式.
设置是:
工作表.xls
PHPExcel 对象
什么有效
克隆和附加工作非常出色,但由于一些与 phpexcel 文件相关的奇怪通知而需要时间:
注意:\serverpath\PHPExcel\Classes\PHPExcel.php 第 729 行中的未定义偏移量:1
注意:\serverpath\PHPExcel\Classes\PHPExcel.php 第 729 行中的未定义偏移量:2
注意:\serverpath\PHPExcel\Classes\PHPExcel.php 第 729 行中的未定义偏移量:3
注意:\serverpath\PHPExcel\Classes\PHPExcel.php 第 729 行中的未定义偏移量:4
EDIT ::
第 729 行指的是:
foreach ($sheet->getCellCollection(false) as $cellID) {
$cell = $sheet->getCell($cellID);
++$countReferencesCellXf[$cell->getXfIndex()]; // line 729
}
据我所知,这是关于风格的。
什么不起作用
生成的文件丢失原始格式但保留公式,因此原始“模板”(sheet.xls) 的每个边框(和任何样式)都会丢失。
代码的相关部分
我只在这里发布真正相关的代码,主要是因为它大约有一千行代码。
稍后将保存创建的文件(发生在父 foreach 中):
$file = new PHPExcel();
克隆(在上面创建后发生在子 foreach 内部):
$sd = $objReader->load("sheet.xls");
$sc = $sd ->getActiveSheet()->copy();
$clonedSheet = clone $sc;
追加(对于上面的克隆,在子进程中发生 N 次):
$ficheName = "not relevant tbh and less than 31 characters";
$temporarySheet = clone $clonedSheet;
$temporarySheet->setTitle($ficheName);
$file->addSheet($temporarySheet,0);
$file->setActiveSheetIndex($file->getIndex($temporarySheet));
unset($temporarySheet);
// some actions are done here
保存(在 foreach 之外,发生在创建 PHPExcel 对象的同一个 foreach 中:
$objWriter = PHPExcel_IOFactory::createWriter($file, 'Excel5');
$objWriter->save($filename);
限制
我对应该使用哪种 excel 格式绝对没有限制,我使用 2003,因为我有一些机器只能使用 excel 2003,但它们很快就会升级到 Office 2010,所以几乎任何读者和作者还好,我用的是2003,因为我一直用它,到目前为止没有任何问题。
不过,我被迫将 XLS 工作表克隆到另一个文件中,我能做的唯一可能的技巧是在同一文件中克隆该工作表,然后通过保留原始工作表来保存它,但如果还有其他机会“导出” “我真的很欣赏这种风格。
我已经检查过的内容:
PHPExcel 克隆 .xlsm 与宏 https://stackoverflow.com/questions/5913818/phpexcel-clone-xlsm-with-macros
http://www.mindfiresolutions.com/Cloning-a-XLS-worksheet-in-PHP--Mindfire-Solutions-933.php http://www.mindfiresolutions.com/Cloning-a-XLS-worksheet-in-PHP--Mindfire-Solutions-933.php
PHPExcel 1.8.0 - 通过克隆模板工作表创建许多工作表,每次克隆都会变慢 https://stackoverflow.com/questions/26211682/phpexcel-1-8-0-creating-many-sheets-by-cloning-a-template-sheet-gets-slower-wi
使用 PHPExcel 复制样式的解决方法 https://stackoverflow.com/questions/18258318/workaround-for-copying-style-with-phpexcel
EDIT ::
我也尝试过:
- 打开文件并获取工作表,而不是克隆原始工作表 - 问题仍然存在。
- 尝试使用 Excel2007 进行阅读和写作 - 问题仍然存在。
- 尝试不使用 ->copy() - 问题仍然存在。
- 已更新 phpexcel 至 1.8,现在上面的通知出现在第 1079 行,但引用的是同一段代码 - 问题仍然存在。