2014-11-05 2644 views
4

我正在使用python 2.7和docx,我想根据条件更改表格中单元格的背景和文本颜色。python docx设置表格单元格背景和文本颜色

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

有什么建议吗?

编辑1

我的代码

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) 

所有的细胞仍然是相同的。

回答

3

它看起来像,而不是使用cell.text = "Something"方法,你需要使用cell.add_paragraph("SomeText", a_style)与定义的风格 - 很可能之一:

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

全部列表here

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

+0

是否可以将excel对象插入word文档? – Yebach 2014-11-05 13:54:06

+0

当前不可以,您可以插入到xlsx文件的链接,甚至可以插入xlsx文件,或者您可以使用xlrd将xlxs文件内容解析到表中以获取数据。 – 2014-11-05 16:59:35

+0

但仍然会对单元格进行样式设置? – Yebach 2014-11-05 20:38:51

3

我们发现,如果您使用cell.add_paragraph('sometext',style_object),它会保留现有的空段落并添加一个带有样式的附加段落,这并不理想。

,你会想要做的是一样的东西:

# 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 

注意,样式应用到段落不是细胞,这是不理想的背景颜色(因为它不会填补输入单元格,如果你有一些填充,我还没有找到解决方法(除非你希望每个单元格都有背景色,你可以将样式应用到table.style)

另外,请确保您的款式已定义,您可以查看

styles = documents.styles 
for s in styles: 
    print s.name 

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

2

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

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) 

现在,如果你也想填补了第一行中的第二个单元格用相同的颜色,你应该创建一个新的元素 否则,如果您使用相同的元素作为填充上面会继续前进,将来自第一小区消失......

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) 

...等其它细胞。

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

相关问题