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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 13

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

样式可以自定义:样式

file

1周前 评论

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

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

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

或者V我200手把手教。

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

1周前 评论
test2018 (楼主) 1周前

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

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

@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);
}
1周前 评论

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

1周前 评论

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