2017-08-30 318 views
0

我已經開始學習openpyxl。我已經學會了如何找到最大值,使單元格的粗體值,應用公式等。現在,我面臨一個問題。我有Excel文件,其中包含10張工作表。在這10張紙中,首先我必須檢索4張紙,然後我必須在每列中找到最大值並使其變粗。我寫了一個代碼,但它不能很好地工作 - 有時會正常工作,有時候不會。在excel表格中查找列的最大值並使其變爲粗體來突出顯示它 - openpyxl

Here is the Link以對輸入和輸出文件進行採樣。

下面是代碼:

import os 
from openpyxl.formatting import Rule 
from openpyxl.styles import Font, PatternFill, Border 
from openpyxl.styles.differential import DifferentialStyle 
import shutil 
shutil.copy('../test.xlsx', 'test.xlsx') 

def bold_max_columnValue(file): 
    wb = load_workbook(file) 
    for ws in wb.worksheets: 

    if ws.title in ['Accuracy', 'Precision', 'Recall', 'F1-Measure']: 

     dxf = DifferentialStyle(font=Font(bold=True)) 
     range_cell = 'C5:C10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 

     range_cell = 'D5:D10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 

     range_cell = 'E5:E10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 

     range_cell = 'F5:F10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 

     range_cell = 'G5:G10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 

     range_cell = 'H5:H10' 
     rule = Rule(type='cellIs', dxf=dxf, formula=["=MAX("+ range_cell +")"]) 
     ws.conditional_formatting.add(range_cell, rule) 
    wb.save('output-test.xlsx') 


def iterate_files(): 
    for file in os.listdir('.'): 
    stop = file.split('.') 
    if stop[-1] in ['xlsx']: 
     print(file) 
     bold_max_columnValue(file) 

iterate_files() 
print('Script Completed') 

我研究openpyxl文檔,但它並沒有幫助我。

謝謝。

+0

你應該提供更多關於不起作用的信息。在使用條件格式時,任何規則的評估均由Excel處理。然而,你可以從簡化你的代碼開始,這些代碼有很多重複的步驟。 –

+0

有兩個問題。 1.它總是選擇並加粗表格的最後一行。 2.有時候,它會選擇多個值。 3.有時,它工作正常(奇怪) 這裏是[鏈接]輸入/輸出文件的快照(https://drive.google.com/open?id=0BwBntjDiENh5X2VPTmlibHNoeVk) (我打算刪除後面的重複步驟,當代碼開始工作時可以接受) 謝謝@CharlieClark – Irfanullah

回答

0

你真的在問Excel如何評估條件格式,我不能幫你。從Excel創建模板並反向設計格式可能更好。條件格式化的規則常常違反直覺。

如果你只是想突出最高值的小區,那麼你可以使用TOP10的規則,只是將其設置爲包含一個值:

<cfRule type="top10" dxfId="1" priority="1" percent="1" rank="1">

否則,我認爲你可能需要使用絕對座標$A$1:$A$5,因爲條件格式默認使用相對座標。

相關問題