使用PHPExcel复制样式的解决方法

外星科技

我想将样式信息从单元格复制到范围,例如Excel中的Format Painter。该文档说要执行以下操作:

$activeSheet->duplicateStyle($activeSheet->getStyle('A1'), 'D1:D100');
$activeSheet->duplicateStyle($activeSheet->getStyle('B1'), 'E1:E100');

似乎有一个错误,因为D1:D100和E1:E100都从单元格B1获得样式。如果更改两行的顺序,则两个范围都将从A1获得样式。同样,

$styleA = $activeSheet->getStyle('A1');
$styleB = $activeSheet->getStyle('B1');
$activeSheet->duplicateStyle($styleA, 'D1:D100');

导致D1:D100从单元格B1获取样式信息。最后的getStyle值用于所有重复的样式结果中。

我确信PHPExcel的将来版本将有修复程序,在此之前,我只需要找出解决方法。

马克·贝克

一种解决方法是使用xf索引样式:

$xfIndex = $activeSheet->getCell('A1')->getXfIndex();

然后为该范围内所有单元格的xfIndex设置该值

for ($col = 'D'; $col != 'E'; ++$col) {
    for ($row = 1; $row <= 100; ++$row) {
        $activeSheet->getCell($col . $row)->setXfIndex($xfIndex);
    }
}

编辑

或者,将修复程序应用于Classes / PHPExcel / Worksheet.php中的plicateStyle()方法

第1479至1486行当前显示为:

if ($this->_parent->cellXfExists($pCellStyle)) {
    // there is already this cell Xf in our collection
    $xfIndex = $pCellStyle->getIndex();
} else {
    // we don't have such a cell Xf, need to add
    $workbook->addCellXf($pCellStyle);
    $xfIndex = $pCellStyle->getIndex();
}

改成:

if ($existingStyle = $this->_parent->getCellXfByHashCode($pCellStyle->getHashCode())) {
    // there is already such cell Xf in our collection
    $xfIndex = $existingStyle->getIndex();
} else {
    // we don't have such a cell Xf, need to add
    $workbook->addCellXf($pCellStyle);
    $xfIndex = $pCellStyle->getIndex();
}

类似地,在Classes / PHPExcel / Style.php中的applyFromArray()方法中

第425至432行当前显示为:

if ($workbook->cellXfExists($newStyle)) {
    // there is already such cell Xf in our collection
    $newXfIndexes[$oldXfIndex] = $existingStyle->getIndex();
} else {
    // we don't have such a cell Xf, need to add
    $workbook->addCellXf($newStyle);
    $newXfIndexes[$oldXfIndex] = $newStyle->getIndex();
}

改成:

if ($existingStyle = $workbook->getCellXfByHashCode($newStyle->getHashCode())) {
    // there is already such cell Xf in our collection
    $newXfIndexes[$oldXfIndex] = $existingStyle->getIndex();
} else {
    // we don't have such a cell Xf, need to add
    $workbook->addCellXf($newStyle);
    $newXfIndexes[$oldXfIndex] = $newStyle->getIndex();
}

编辑#2

现在,已将Fix推送到github上的developer分支。根据使用的样式的数量,它确实会给性能带来轻微的影响。明天晚上我将尝试获得更快的版本

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用VCL样式时,滚动条会导致丑陋的Window更新-解决方法?

来自分类Dev

Microsoft Access复制输出目标的解决方法

来自分类Dev

使用Ruby解决方法挑战

来自分类Dev

使用WCF解决方法的局部类

来自分类Dev

树枝:解决方法

来自分类Dev

DefaultIfEmpty的解决方法

来自分类Dev

树枝:解决方法

来自分类Dev

Outlook 2007无法复制粘贴(解决方法/解决方案在这里)

来自分类Dev

如何使用Scala隐式方法解决方法委派

来自分类Dev

JavaFX重复使用@FXML标签解决方法

来自分类Dev

使用WriteableBitmap.AddDirtyRect()时内存泄漏的解决方法

来自分类Dev

强制使用mapply是否有解决方法

来自分类Dev

iOS 13.0中不建议使用“ scanLocation”解决方法

来自分类Dev

使用bazel cquery的output = graph的解决方法

来自分类Dev

如何在docker中使用wsl(不是解决方法)

来自分类Dev

是否可以在.textContent中使用<tags>或解决方法?

来自分类Dev

创建要在片段中使用的对象的解决方法

来自分类Dev

pmAuto ModalPopupMode正确使用或错误解决方法

来自分类Dev

Glassfish 与 OpenAM 一起使用的解决方法

来自分类Dev

有效的解决方法而不是使用大量的 if 语句?

来自分类Dev

在phpExcel中从复制的行重置样式

来自分类Dev

双重锁定解决方法

来自分类Dev

Xamarin Mac解决方法

来自分类Dev

屏幕闪烁的解决方法

来自分类Dev

除以零的解决方法

来自分类Dev

Xamarin Mac解决方法

来自分类Dev

异步JavaScript解决方法

来自分类Dev

Youtube API 的解决方法?

来自分类Dev

无法解决方法重载