首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python docx设置表格单元格背景和文本颜色

python docx设置表格单元格背景和文本颜色
EN

Stack Overflow用户
提问于 2014-11-05 16:46:07
回答 7查看 25K关注 0票数 7

我使用的是python 2.7和docx,我想根据条件改变表格中单元格的背景和文本颜色。

我找不到任何关于单元格格式的有用资源。

有什么建议吗?

编辑1

我的代码

代码语言:javascript
复制
style_footer = "DarkList"
style_red = "ColorfulList"
style_yellow = "LightShading"
style_green = "MediumShading2-Accent6"
style_transperent = "TableNormal"
for a,rec in enumerate(data):
    #V headinh se piše prvo polje iz table heada
    document.add_heading(rec['tableHead'][0][0], level=1)
    image_path = imageFolder + "\\" + slike[a]
    document.add_picture(image_path, height=Inches(3.5))

    #y += 28
    #worksheet.insert_image( y, 1,imageFolder + "/" + slike[a])


    for i, head in enumerate(rec['tableHead']):
        table = document.add_table(rows=1, cols = len(head))
        hdr_cells = table.rows[0].cells
        for a in range(0,len(head)):
            hdr_cells[a].text = head[a] 


    for a,body in enumerate(rec['tableData']):
        row_cells = table.add_row().cells

        for a in range(0,len(body)):
            if body[a]['style'] == 'footer':
                stil = style_footer
            elif body[a]['style'] == 'red':
                stil = style_red

            elif body[a]['style'] == 'yellow':
                stil = style_yellow
            elif body[a]['style'] == 'green':
                stil = style_green

            else:
                stil = style_transperent

            row_cells[a].add_paragraph(body[a]['value'], stil)

document.save(wordDoc)

所有的单元格都是一样的。

EN

回答 7

Stack Overflow用户

发布于 2017-04-18 16:38:10

如果您想用颜色填充表格中的特定单元格,可以使用下面的代码。例如,假设您需要用RGB颜色1F5C8B填充表格第一行的第一个单元格:

代码语言:javascript
复制
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml

shading_elm_1 = parse_xml(r'<w:shd {} w:fill="1F5C8B"/>'.format(nsdecls('w')))
table.rows[0].cells[0]._tc.get_or_add_tcPr().append(shading_elm_1)

现在,如果你想用相同的颜色填充第一行的第二个单元格,你应该创建一个新的元素,否则如果你使用与上面相同的元素,填充将继续并从第一个单元格消失...

代码语言:javascript
复制
shading_elm_2 = parse_xml(r'<w:shd {} w:fill="1F5C8B"/>'.format(nsdecls('w')))
table.rows[0].cells[1]._tc.get_or_add_tcPr().append(shading_elm_2)

其他单元格的...and依此类推。

来源:https://groups.google.com/forum/#!topic/python-docx/-c3OrRHA3qo

票数 19
EN

Stack Overflow用户

发布于 2016-02-20 16:00:18

我们发现,如果你执行cell.add_paragraph('sometext',style_object),它将保留现有的空段落,并添加一个带有样式的额外段落,这是不理想的。

您想要做的事情如下:

代码语言:javascript
复制
# replace the entire content of cell with new text paragraph
cell.text = 'some text'
# assign new style to the first paragraph
cell.paragraphs[0].style = style_object 

请注意,样式应用于段落而不是单元格,这对于背景颜色不是理想的(因为如果您有一些填充,它不会填充enter单元格。我还没有找到解决这个问题的方法(除了您希望每个单元格都有背景色的情况外,您可以将样式应用于table.style)。

此外,请确保定义了您的样式。你可以查看

代码语言:javascript
复制
styles = documents.styles
for s in styles:
  print s.name

以查看您拥有的所有样式。您可以定义新样式,也可以加载已有预定义样式的模板文档。

票数 4
EN

Stack Overflow用户

发布于 2014-11-05 17:13:07

看起来您需要使用具有定义样式的cell.add_paragraph("SomeText", a_style),而不是使用cell.text = "Something"方法-可能是以下之一:

  • ColorfulGrid
  • ColorfulGrid-Accent1
  • ColorfulGrid-Accent2
  • ColorfulGrid-Accent3
  • ColorfulGrid-Accent4
  • ColorfulGrid-Accent5
  • ColorfulGrid-Accent6

完整列表。

如果您使用“默认”模板文档-否则您将不得不创建自己的模板文档。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26752856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档