我的迭代代码有什么问题
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]
请为我的问题投票 我刚刚在我的关键时刻被禁止发布问题。我是初学者程序员。请大家。
我有两个列表,我需要迭代两个列表中的每个项目(按顺序)以使用 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]