我的迭代代码有什么问题

what's wrong with my iteration code

请为我的问题投票 我刚刚在我的关键时刻被禁止发布问题。我是初学者程序员。请大家。

我有两个列表,我需要迭代两个列表中的每个项目(按顺序)以使用 openpyxl 更改 Excel 单元格填充颜色。我在以 ws.cell(row = int(items), column

开头的行中遇到语法错误

代码如下:

color_lst= ['FF333399', 'FFFFFF00', 'FFC0C0C0', 'FF00FF00', 'FF008080', 'FF00FFFF', 'FF000080', 'FF800000', 'FF969696', 'FFFF99CC', 'FFFFFF99', 'FF800080', 'FF99CC00', 'FF0000FF']

label_list_for_col_header= ['Energy', 'Green Buildings', 'High Performance Buildings', 'Computing', 'Design', 'Infrared', 'Laser scanning', 'Outdoor Thermal Comfort', 'Urban Desgin', 'Daylighting', 'Thermal Comfort', 'Parametric', 'Simulation Tools', 'N']

gerenral_lst= list()

m= 0    
for row in ws.iter_rows('D2:D11'):
    for cell in row:
        if label_list_for_col_header[m] in cell.value : 
            general_lst.append(cell.row)
        for items in range(len(general_lst)):

            ws.cell(row = int(items), column = int(label_list_for_col_header.index(label_list_for_col_header[0])).fill = PatternFill(start_color=str(color_lst[m]), end_color=str(color_lst[m]) , fill_type='solid')
    general_lst = []
    m +=1       

我按照建议修改了代码,但是循环只执行了一次。不知道为什么

m= 0    
for row in ws.iter_rows('D2:D11'):
    for cell in row:
        if label_list_for_col_header[m] in cell.value : 
            general_lst.append(cell.row)
        for items in range(len(general_lst)):

            ws.cell(row = general_lst[items], column = int(m+5)).fill = PatternFill(start_color=str(color_lst[m]), end_color=str(color_lst[m]) , fill_type='solid')
    general_lst = []
    m +=1       

我终于得到了可以工作的代码,以防其他人遇到同样的问题,这里是工作代码:

m= 0    
for lbls in label_list_for_col_header: 
    j= int(label_list_for_col_header.index(lbls))+5
    for row in ws.iter_rows('D2:D11'):
        for cell in  row:

            if lbls in cell.value : 
                general_lst.append(cell.row)
                for items in range(len(general_lst)):

                    ws.cell(row = general_lst[items], column = j).fill = PatternFill(start_color=str(color_lst[m]), end_color=str(color_lst[m]) , fill_type='solid')
    general_lst = []
    m +=1       

参考编辑错误:

您可以通过这种方式遍历列表:

for items in general_lst:

不需要range(len())

尝试将尽可能多的过程代码排除在循环之外很重要。这使得它更容易理解并且可能会更快。因此,例如,您可以提前列出所有可能的填充。

猜猜你想做什么我认为下面的代码可能有效或足够接近。提供尽可能多的上下文很重要,即。 ws 是什么。

from openpyxl import load_workbook
wb = load_workbook("List of books about buildings.xlsx")
ws = wb.active

color_lst= ['FF333399', 'FFFFFF00', 'FFC0C0C0', 'FF00FF00', 'FF008080', 'FF00FFFF', 'FF000080', 'FF800000', 'FF969696', 'FFFF99CC', 'FFFFFF99', 'FF800080', 'FF99CC00', 'FF0000FF']

label_list_for_col_header= ['Energy', 'Green Buildings', 'High Performance Buildings', 'Computing', 'Design', 'Infrared', 'Laser scanning', 'Outdoor Thermal Comfort', 'Urban Desgin', 'Daylighting', 'Thermal Comfort', 'Parametric', 'Simulation Tools', 'N']

fills = [PatternFill(fgColor=color), bgColor=color, fill_type="solid") for color in color_lst]


for idx, row in enumerate(ws.iter_rows('D2:D11')):
    for cell in row:
        if label_list_for_col_header[idx] in cell.value : 
            cell.fill = fills[idx]