2017-08-30 316 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,因为条件格式默认使用相对坐标。

相关问题