【发布时间】:2015-08-10 20:47:22
【问题描述】:
我有一个创建 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_border 和 right_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_border 和 right_border 样式时再次应用。
在第 10 行和第 11 行的屏幕截图中更明显。您可以看到它们之间没有边界,因此灰色的行网格在一起。但是,边框会在同一行的“新建”标题下正确应用。
我尝试在添加 outline_border 和 right_border 样式之前再次添加 default_style,但没有成功。
提前感谢您的帮助!
更新
我意识到当我将odd_row_style 设置为一行时,填充单元格颜色会覆盖边框,即使我重新包含了默认边框。无论单元格是否具有值,它似乎都会这样做。请参见上图中的单元格 F10:G11(值)和 A10:C11(无值)。
更奇怪的是,当我将default_style 应用到整个工作表时,所有内容的边框颜色都是#c1c1c1,而不是像我尝试设置它们的#aaaaaa。
这让我发疯了,如果有人可以帮忙!
【问题讨论】: