有没有通过xlswrite组件 导出带有复杂样式的excel表格的?

有没有通过xlswrite组件 导出带有复杂样式的excel表格的?表头有不同背景颜色,然后各种合并单元格

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 16

可以看他们的官方文档,有合并单元格等操作:xlswriter

样式可以自定义:样式

file

10个月前 评论

手动做好模板,直接往里填数据会快一点。如果表格很复杂通过代码生成,会有亿点点复杂

10个月前 评论
风吹过有夏天的味道 10个月前
IHaveBug (作者) 10个月前
test2018 (楼主) 10个月前

可以的,跟着文档过一遍。然后按照你想要的格式去合并和设置颜色就行啊。你甚至可以第一次循环data先把表格样式设置好,然后第二次循环在插入数据这样更明了

或者V我200手把手教。

----来自xlswriter的QQ群管理回答 :grin:

10个月前 评论
test2018 (楼主) 10个月前

我是根据文档,将所有的样式设置封装成了基类,可以根据自己的需求去调用其中的方法,例如合并单元格:

// 调用时传入变量
$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']);
}
10个月前 评论
test2018 (楼主) 10个月前
learn小辉 (作者) 10个月前
test2018 (楼主) 10个月前

@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);
}
10个月前 评论

试试先把Excel的表格样式调好了,当模板写数据,应该会容易点

10个月前 评论

可以阅读下源码,这个低层是xml 文件

9个月前 评论
DogLoML

可以试试这个满不满足你的要求 博客:laravel扩展:xlswriter导出,自定义复杂合并及样式

每行数据插入之后,有一个回调,你可以在回调里面访问到这一分块的所有数据,以及设置这一行的样式,合并等,表头样式有一个setHeaderStyle方法定义好了,可以参考setHeaderStyle进行覆写,就可以改背景色了。

如果重写插入单元格的方法,在其中可以获取行数和列数,如判断当前格是否为B3,指定背景、字体、合并等

可以获取当前写入的数据,如判断学生成绩低于60分的,设置为红色

可以根据行号获取分块每行的数据,判断班级名称一列邻近的值是否相同,实现纵向合并相同的班级为一个单元格。

9个月前 评论

我们也有这样的需求,这种自定义样式和合并单元格又细碎又繁琐

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!