Python 什么';我的迭代代码有什么问题
请为我的问题投赞成票,我刚刚被禁止在关键时刻发布问题。我是一个初学者程序员。拜托,伙计们 我有两个列表,我需要迭代两个列表中的每个项目(以便)使用openpyxl更改Excel单元格填充颜色。我在以ws.cell(row=int(items),column)开头的行中得到一个语法错误 代码如下:Python 什么';我的迭代代码有什么问题,python,list,loops,openpyxl,Python,List,Loops,Openpyxl,请为我的问题投赞成票,我刚刚被禁止在关键时刻发布问题。我是一个初学者程序员。拜托,伙计们 我有两个列表,我需要迭代两个列表中的每个项目(以便)使用openpyxl更改Excel单元格填充颜色。我在以ws.cell(row=int(items),column)开头的行中得到一个语法错误 代码如下: color_lst= ['FF333399', 'FFFFFF00', 'FFC0C0C0', 'FF00FF00', 'FF008080', 'FF00FFFF', 'FF000080', 'FF80
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:
无需使用
范围(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]
你错过了一个结束语。我刚刚检查了所有括号,我相信我没有遗漏任何括号。但是,颜色应该用引号输入,如“FFEE111”。问题可能是从列表FFEE111中提取字符串(不带引号)我有另一个工作的代码,它的结构与上面的代码几乎相同,行看起来是这样的:ws.cell(row=2,column=3)。fill=PatternFill(start_color='FF993366',end_color='FF993366',fill_type='solid')
ws.cell(row=int(items),column=int(label_list_表示列的列头。index(label_list_表示列的列头[0])).fill
请计数。您需要在之前关闭一个。fill
您完全正确。我修复了它,但是我遇到另一个错误,即“行或列值必须至少为1”.现在我在想问题出在哪里请投票支持我的问题我刚被禁止在关键时刻发布问题。我是一个初学者程序员。请各位。