可以的,跟着文档过一遍。然后按照你想要的格式去合并和设置颜色就行啊。你甚至可以第一次循环data先把表格样式设置好,然后第二次循环在插入数据这样更明了
或者V我200手把手教。
----来自xlswriter的QQ群管理回答 :grin:
我是根据文档,将所有的样式设置封装成了基类,可以根据自己的需求去调用其中的方法,例如合并单元格:
// 调用时传入变量
$combine = [
['start' => 'A1', 'end' => 'H1'],
['start' => 'A2', 'end' => 'H2'],
];
// 合并单元格
$combineCount = count($combine);
for ($i = 0; $i < $combineCount; $i++) {
$objActSheet->mergeCells($combine[$i]['start'] . ':' . $combine[$i]['end']);
}
@test2018 我用的是 phpoffice/phpspreadsheet
,原理基本相近。
下面是PHP-Xlswriter合并单元格底层代码,其中value
类型为zval
,你传null
或者空字符串试试吧?
/*
* Merge cells.
*/
void merge_cells(zend_string *range, zval *value, xls_resource_write_t *res, lxw_format *format)
{
char *_range = ZSTR_VAL(range);
int error = worksheet_merge_range(res->worksheet, RANGE(_range), "", format);
// Cells that have been placed cannot be modified using optimization mode
WORKSHEET_INDEX_OUT_OF_CHANGE_IN_OPTIMIZE_EXCEPTION(res, error)
// Worksheet row or column index out of range
WORKSHEET_INDEX_OUT_OF_CHANGE_EXCEPTION(error)
// writer merge cell
type_writer(value, lxw_name_to_row(_range), lxw_name_to_col(_range), res, NULL, format);
}
可以试试这个满不满足你的要求 博客:laravel扩展:xlswriter导出,自定义复杂合并及样式
每行数据插入之后,有一个回调,你可以在回调里面访问到这一分块的所有数据,以及设置这一行的样式,合并等,表头样式有一个setHeaderStyle方法定义好了,可以参考setHeaderStyle进行覆写,就可以改背景色了。
如果重写插入单元格的方法,在其中可以获取行数和列数,如判断当前格是否为B3,指定背景、字体、合并等
可以获取当前写入的数据,如判断学生成绩低于60分的,设置为红色
可以根据行号获取分块每行的数据,判断班级名称一列邻近的值是否相同,实现纵向合并相同的班级为一个单元格。
推荐文章: