关于python-docx为表格表头设置背景色,只有最后一个单元格设置颜色成功

一开始我以为color只需要创建一次就可以了,不需要重复初始化,结果发现表头只有最后一格变色,之后经过一系列研究,发现必须为每一个单元格初始化一个color对象,至于为什么还不知道。

    def add_params_table(self, param_node_list: List[Node]):
        """
        添加参数表格
        :param param_node_list:
        :return:
        """
        table: Table = self.document.add_table(rows=1, cols=6, style="Table Grid")
        row: Row = table.rows[0]
        table_headers: List[str] = ["参数名称", "描述", "类型", "取值范围", "默认值", "备注"]
        color: Element = parse_xml(r'<w:shd {} w:fill="{color_value}"/>'.format(
            nsdecls('w'), color_value=GREY))
        for i in range(6):
            cell: Cell = row.cells[i]
            cell.text = table_headers[i]
            
            cell._tc.get_or_add_tcPr().append(color)
        for i, params_node in enumerate(param_node_list):
            table.add_row()
            row: Row = table.rows[1+i]
            cells: List[Cell] = row.cells
            node_data: LeafNodeData = params_node.data
            cells[0].text = params_node.text
            cells[1].text = node_data.description
            cells[2].text = node_data.value_range.datatype
            cells[3].text = self.get_value_range(node_data=node_data)
            cells[4].text = str(node_data.value_range.default)
            cells[5].text = "Key字段,必配" if node_data.key else "可选配置"
        return

在这里插入图片描述
关键代码是这一行

color: Element = parse_xml(r'<w:shd {} w:fill="{color_value}"/>'.format(
            nsdecls('w'), color_value=GREY))

实际上需要这样,为每一个单元格创建一个color对象,只有这样才能使表头全部变色。

    def add_params_table(self, param_node_list: List[Node]):
        """
        添加参数表格
        :param param_node_list:
        :return:
        """
        table: Table = self.document.add_table(rows=1, cols=6, style="Table Grid")
        row: Row = table.rows[0]
        table_headers: List[str] = ["参数名称", "描述", "类型", "取值范围", "默认值", "备注"]
        for i in range(6):
            cell: Cell = row.cells[i]
            cell.text = table_headers[i]
            color: Element = parse_xml(r'<w:shd {} w:fill="{color_value}"/>'.format(
                nsdecls('w'), color_value=GREY))
            cell._tc.get_or_add_tcPr().append(color)
        for i, params_node in enumerate(param_node_list):
            table.add_row()
            row: Row = table.rows[1+i]
            cells: List[Cell] = row.cells
            node_data: LeafNodeData = params_node.data
            cells[0].text = params_node.text
            cells[1].text = node_data.description
            cells[2].text = node_data.value_range.datatype
            cells[3].text = self.get_value_range(node_data=node_data)
            cells[4].text = str(node_data.value_range.default)
            cells[5].text = "Key字段,必配" if node_data.key else "可选配置"
        return

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值