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_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行的截图中看得更明显。你可以看到它们之间没有边框,所以灰色的行网格在一起。但是,在同一行的 "New" 标题下正确应用了边框。
我尝试在添加 outline_border
和 right_border
样式之前再次添加 default_style
,但没有成功。
在此先感谢您的帮助!
更新
我意识到当我将 odd_row_style
设置为一行时,填充单元格颜色会覆盖边框,即使我有 re-included 边框默认值。无论单元格是否具有值,它似乎都会这样做。请参阅上图中的单元格 F10:G11(值)和 A10:C11(无值)。
更奇怪的是,当我将 default_style
应用到整个 sheet 时,所有边框颜色都是 #c1c1c1
,而不是像我尝试设置的那样 #aaaaaa
.
这让我发疯,如果有人可以帮助!
出于某种原因,使用 ->getDefaultStyle()->applyFromArray()
方法设置边框样式让我感到很奇怪。如果我通过输入一个或多个单元格使用 ->getStyle()->applyFromArray()
显式设置单元格,它会按预期工作。我不确定这是预期的结果还是错误,但我在他们的 github 上提出了一个问题。欢迎追踪here.
我有一个 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_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行的截图中看得更明显。你可以看到它们之间没有边框,所以灰色的行网格在一起。但是,在同一行的 "New" 标题下正确应用了边框。
我尝试在添加 outline_border
和 right_border
样式之前再次添加 default_style
,但没有成功。
在此先感谢您的帮助!
更新
我意识到当我将 odd_row_style
设置为一行时,填充单元格颜色会覆盖边框,即使我有 re-included 边框默认值。无论单元格是否具有值,它似乎都会这样做。请参阅上图中的单元格 F10:G11(值)和 A10:C11(无值)。
更奇怪的是,当我将 default_style
应用到整个 sheet 时,所有边框颜色都是 #c1c1c1
,而不是像我尝试设置的那样 #aaaaaa
.
这让我发疯,如果有人可以帮助!
出于某种原因,使用 ->getDefaultStyle()->applyFromArray()
方法设置边框样式让我感到很奇怪。如果我通过输入一个或多个单元格使用 ->getStyle()->applyFromArray()
显式设置单元格,它会按预期工作。我不确定这是预期的结果还是错误,但我在他们的 github 上提出了一个问题。欢迎追踪here.