如何定义一个函数来为 python-docx 创建的 table 添加单元格颜色?

How to define a function to add cell colour for a table that created by python-docx?

我想定义一个函数来填充header颜色, 现在,我只是硬编码每个 object.

这是我使用的代码,我试图定义一个函数来添加单元格颜色。 错误消息如下所示:

from docx import Document
from openpyxl import load_workbook
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from zmq import NULL
document = Document()

k=1
for k in range (1,5):
    table  = document.add_table(rows=2, cols=3)
    table.cell(0,0).text = ('Type')
    table.cell(0,1).text = ('Value')
    table.cell(0,2).text = ('Connections')

    def set_table_header_bg_color(table.rows[row_ix].cell):
        """
        set background shading for Header Rows
        """
        tblCell = cell._tc
        tblCellProperties = tc.get_or_add_tcPr()
        clShading = OxmlElement('w:shd')
        clShading.set(qn('w:fill'), "00519E") #Hex of Dark Blue Shade {R:0x00, G:0x51, B:0x9E}
        tblCellProperties.append(clShading)
        return cell


    for each_row in table.rows :
        for each_cell in each_row.cells:
                set_table_header_bg_color(each_cell)

你们能帮我解决这个错误吗? 我从 复制这个函数 但是这个功能似乎不能用在我的情况下......

一些注意事项

  1. 您需要注意缩进; 'def' 不应该缩进,也不要放在一段代码的中间。
  2. 分配给范围时不需要初始化变量;不需要 k=1 范围在下一行指定。
  3. 不需要return 'cell' def 是一个改变单元格阴影的函数,没有什么可以return。

如您所写,您正在创建 3 个具有 'k' 范围的表,不确定这是否是您的意图。

from docx import Document
from docx.oxml.shared import qn
from docx.oxml.xmlchemy import OxmlElement


doc_name = 'doc_w_tables.docx'
document = Document()
tables = document.tables


def set_table_header_bg_color(tc):
    """
    set background shading for Header Rows
    """
    tblCellProperties = tc._element.tcPr
    clShading = OxmlElement('w:shd')
    clShading.set(qn('w:fill'), "00519E")  # Hex of Dark Blue Shade {R:0x00, G:0x51, B:0x9E}
    tblCellProperties.append(clShading)


for k in range(0, 3):
    table  = document.add_table(rows=2, cols=3)
    table.cell(0, 0).text = 'Type'
    table.cell(0, 1).text = 'Value'
    table.cell(0, 2).text = 'Connections'

    for j in range(0,3):
        set_table_header_bg_color(table.rows[0].cells[j])

document.save(doc_name)