PHPExcel快速重复行

每个单元格都有不同样式的行.我需要复制它(复制文本,样式,大小).

我正在使用以下功能来执行此操作:

  function copyRowFull(&$ws_from, &$ws_to, $row_from, $row_to) {
    $ws_to->getRowDimension($row_to)->setRowHeight($ws_from->getRowDimension($row_from)->getRowHeight());
    $lastColumn = $ws_from->getHighestColumn();
    $rangeFrom = 'A'.$row_from.':'.$lastColumn.$row_from;
    // copy text
    $ws_to->fromArray($ws_from->rangeToArray($rangeFrom), null, 'A'.$row_to);
    // copy style
    ++$lastColumn;
    for ($c = 'A'; $c != $lastColumn; ++$c) {
      $ws_to->duplicateStyle($ws_from->getStyle($c.$row_from), $c.$row_to);
    }
  }

然而它由于循环而非常慢但我需要它很快,因为许多行将被复制.

我也试过这个样式复制:

$rangeTo = 'A'.$row_to.':'.$lastColumn.$row_to;
$ws_to->getStyle($rangeTo)->applyFromArray($ws_from->getStyle($rangeFrom));

但它不起作用 – 抛出错误“传递的样式数组无效”.

有没有更快的方法?

解决方法:

在PHPExcel源代码中进行爬网后,我发现了更快的复制行的方法.它只能在一个工作簿中复制,但它是我需要的.发布它,也许某人也有或将会有类似的问题.

function copyRowFull(&$ws_from, &$ws_to, $row_from, $row_to) {
  $ws_to->getRowDimension($row_to)->setRowHeight($ws_from->getRowDimension($row_from)->getRowHeight());
  $lastColumn = $ws_from->getHighestColumn();
  ++$lastColumn;
  for ($c = 'A'; $c != $lastColumn; ++$c) {
    $cell_from = $ws_from->getCell($c.$row_from);
    $cell_to = $ws_to->getCell($c.$row_to);
    $cell_to->setXfIndex($cell_from->getXfIndex()); // black magic here
    $cell_to->setValue($cell_from->getValue());
  }
}
上一篇:PHPExcel中未加载图表


下一篇:php phpexcel 读取excel文件数据