2014-11-05 2641 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

相關問題