一开始我以为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