2017-08-10 66 views
0

我的Python腳本應該檢查某個字符串是否包含在單元格中。如果此條件匹配,則腳本應更改另一個文件中單元格的背景顏色。 這個過程在for循環Openpyxl - 背景顏色不保存在文件

from openpyxl.styles import PatternFill 
column_color = sheet_database.cell(row = nextitem , column = 18).value 
      cell_paint = sheet_blatt.cell(row = 7 + multiplicator * 10 , column = selected_column + 1).fill 
      if column_color == 'AAAAAA': 
       cell_paint = PatternFill(fgColor='C00000', bgColor='C00000', fill_type='solid') 

      elif column_color == 'BBBBBB': 
       cell_paint = PatternFill(fgColor='FF0000', bgColor='FF0000', fill_type='solid') 

出於某種原因,顏色不會保存到最終的文件重複幾次。 腳本的其餘部分只是更改單元格的值,所以顏色不能被腳本的另一部分覆蓋。 此外,調試器顯示,if子句被輸入並執行。

wb_blatt.save('XXXX_' + str(number) + '.xlsx') 

用於保存最終結果。

+0

我以爲你在使用本來顏色的十六進制代碼時使用'start_color'和'end_color'。看到這裏 - http://openpyxl.readthedocs.io/en/default/api/openpyxl.styles.fills.html?highlight=fgColor – droravr

+0

不幫助我。文件沒有變化。 – Venturion

+0

您也可以編寫一些條件格式設置規則來執行此操作。 –

回答

0

試試這個:

from openpyxl.styles import PatternFill 

column_color = sheet_database.cell(row=nextitem, column=18).value 
cell = sheet_blatt.cell(row=7 + multiplicator * 10, column=selected_column + 1) 
if column_color == 'AAAAAA': 
    cell.fill = PatternFill(fgColor='C00000', bgColor='C00000', fill_type='solid') 

elif column_color == 'BBBBBB': 
    cell.fill = PatternFill(fgColor='FF0000', bgColor='FF0000', fill_type='solid') 
+0

謝謝:)幾分鐘前,當我看到你的帖子時,我想到了自己。 但是爲什麼調用填充到包含單元對象的變量並直接調用填充單元對象之間有區別? – Venturion

+0

@Venturion當你第一次做它時,你只是將一個'PatternFill'對象的變量引用移動到一個新對象上,而不是實際上改變活動單元格中的'fill'變量(我希望它足夠清楚)。也許這是一個更好的完美 - https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/ – droravr

+0

謝謝你的解釋 – Venturion