【问题标题】:Phpspreadsheet clone won't work and timeoutPhpspreadsheet 克隆将不起作用并超时
【发布时间】:2018-03-23 21:56:19
【问题描述】:

我是第一次使用 PhpSpreadsheet 并且一直工作得很好。但是今天我需要制作一个文件,其中模板复制多张(超过 300 张)。 查看文档,它使用克隆方法。 但是,在执行时,代码不会给出错误或异常。只是一直“等待本地主机”并突然停止。 我已经增加了 set_time_limit 甚至内存限制,但它仍然无法工作。

代码

$File= IOFactory::createReader("Xlsx");
$Excel = $File->load('original.xlsx');
$clonedSheet = clone $Excel->getActiveSheet();
for($i = 0; $i <= 10; $i++)
{
$clonedSheet->setTitle('Simple Clone'.$i);
$Excel->addSheet($clonedSheet);
}

$writer = IOFactory::createWriter($Excel, "Xlsx");
$filename = "omitidos.xlsx";
$writer->save("output/".$filename );

我尝试使用 for 循环,即使没有它,它也是如此。

会不会是 PHP7 的问题?

欢迎任何帮助。

【问题讨论】:

  • 更有可能是超时或内存限制问题;克隆 300 个工作表是一项相当艰巨的任务
  • @MarkBaker 我不这么认为。正如我在上面的示例中提到的,即使有 10 或 1 个克隆表,问题仍然存在。出于某种原因,“克隆”方法似乎是个问题。

标签: php phpspreadsheet


【解决方案1】:

我现在的“解决方案”:

关于 PHPSpreadSheet\Worksheet\Worksheet.php 文件 转到 __clone 函数 用这个替换它:

public function __clone()
    {
        foreach ($this as $key => $val) {
            if (is_object($val) || (is_array($val))) {
                $this->{$key} = unserialize(serialize($val));
            }
      }

这不是一个完美的解决方案,但它可以完成工作,至少对我而言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2016-09-08
    • 2013-06-12
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多