PHPExcel 边界被覆盖?

PHPExcel borders being overridden?

我有一个 class 可以创建 PHPExcel 文档。以下是我使用的样式。希望他们的名字很明显。

private $default_style = array(
    'font' => array(
        'name' => 'Verdana',
        'color' => array('rgb' => '000000'),
        'size' => 11
    ),
    'alignment' => array(
        'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER
    ),
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN,
            'color' => array('rgb' => 'AAAAAA')
        )
    )
);

private $title_style = array(
    'font' => array(
        'bold' => true
    ),
    'fill' => array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'startcolor' => array('rgb' => '5CACEE')
    ),
    'alignment' => array(
        'wrap' => true
    ),
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN,
            'color' => array('rgb' => 'AAAAAA')
        )
    )
);


private $new_swap_style = array(
    'font' => array(
        'bold' => true
    ),
    'fill' => array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'startcolor' => array('rgb' => 'F9690E')
    ),
    'alignment' => array(
        'wrap' => true
    ),
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN,
            'color' => array('rgb' => 'AAAAAA')
        )
    )
);

private $odd_row_style = array(
    'fill' => array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'startcolor' => array('rgb' => 'CCCCCC')
    ),
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN,
            'color' => array('rgb' => 'AAAAAA')
        )
    )
);

private $outline_border = array(
    'borders' => array(
        'outline' => array(
            'style' => PHPExcel_Style_Border::BORDER_THICK,
            'color' => array('rgb' => '676767')
        )
    )
);

private $right_border = array(
    'borders' => array(
        'right' => array(
            'style' => PHPExcel_Style_Border::BORDER_THICK,
            'color' => array('rgb' => '676767')
        )
    )
);

我使用这段代码应用 odd_row_style

if ($key % 2 != 0) {
    $as->getStyle('A'.$row.':'.$last_col.$row)
       ->applyFromArray($this->odd_row_style);
}

除此之外,我应用的唯一其他样式是 outline_borderright_border 样式。它们应用在我循环遍历的数据末尾,如下所示:

// $row equals the last row after the data is looped through
$as->getStyle('D3:H'.($row))->applyFromArray($this->outline_border);
$as->getStyle('E3:E'.($row))->applyFromArray($this->right_border);

出于某种原因,default_style 中的边框被覆盖,但在我添加 outline_borderright_border 样式时再次应用。

在第10行和第11行的截图中看得更明显。你可以看到它们之间没有边框,所以灰色的行网格在一起。但是,在同一行的 "New" 标题下正确应用了边框。

我尝试在添加 outline_borderright_border 样式之前再次添加 default_style,但没有成功。

在此先感谢您的帮助!

更新

我意识到当我将 odd_row_style 设置为一行时,填充单元格颜色会覆盖边框,即使我有 re-included 边框默认值。无论单元格是否具有值,它似乎都会这样做。请参阅上图中的单元格 F10:G11(值)和 A10:C11(无值)。

更奇怪的是,当我将 default_style 应用到整个 sheet 时,所有边框颜色都是 #c1c1c1,而不是像我尝试设置的那样 #aaaaaa .

这让我发疯,如果有人可以帮助!

出于某种原因,使用 ->getDefaultStyle()->applyFromArray() 方法设置边框样式让我感到很奇怪。如果我通过输入一个或多个单元格使用 ->getStyle()->applyFromArray() 显式设置单元格,它会按预期工作。我不确定这是预期的结果还是错误,但我在他们的 github 上提出了一个问题。欢迎追踪here.