1 つの回避策として、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 の duplicateStyle() メソッドに修正を適用します。
行 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
修正は現在、github の開発ブランチにプッシュされています。使用しているスタイルの数によっては、パフォーマンスがわずかに低下します...明日の夜、より高速なバージョンを取得してみます