我的 python 脚本中的枚举没有按预期工作?
Enumeration in my python Script is not working as intended?
我一直在开发一个足够简单的 python 脚本,目的是从一个 excel sheet 中提取 scrape/copy 数据,然后使用 openpyxl 将其放入另一个中。一切正常,除了我得到我认为是几列的奇怪结果。
基本上对于某些行,我想添加从其他地方提取的数据,例如文件目录等。所以我抓住它并将其存储到变量中的字符串,然后通过枚举将其值传递到多个单元格中.截至目前,这是我的代码:
keyart = str(filedialog.askopenfilename(title="Please select a Keyart file"))
for ws2 in wb2.worksheets:
if keyart == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=7).value = keyart
vision = str(filedialog.askopenfilename(title="Please select a Video file"))
for ws2 in wb2.worksheets:
if vision == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=8).value = vision
audio = str(filedialog.askopenfilename(title="Please select a Audio file"))
for ws2 in wb2.worksheets:
if audio == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=9).value = audio
但是当我预览生成的 Excel sheet 时,它每次都在每列中粘贴了“随机”数量的值,从而产生了这种阶梯效果:
基本上,C 行和 D 行的行数正确,而其他行则没有。我的代码产生这种效果有什么问题,我该如何更正它以便它枚举值并将值传递到正确的行?
据推测,每次修改最后一行时,OpenPyxl 数据模型中可能会添加一行。也许尝试只获取一次行数? (我将您的 for 循环清理为 if
,假设您在工作簿中只有一个工作表。如果不是这种情况,您将必须提前获取每个工作表的行数。)
ws = list(wb2.worksheets)[0] # grab a reference to the first worksheet
n_rows = len(ws.rows) # count the current number of rows
keyart = str(filedialog.askopenfilename(title="Please select a Keyart file"))
if keyart:
for index in range(2, n_rows):
ws.cell(row=index, column=7).value = keyart
# repeat for vision with column = 8
# repeat for audio with column = 9
我一直在开发一个足够简单的 python 脚本,目的是从一个 excel sheet 中提取 scrape/copy 数据,然后使用 openpyxl 将其放入另一个中。一切正常,除了我得到我认为是几列的奇怪结果。
基本上对于某些行,我想添加从其他地方提取的数据,例如文件目录等。所以我抓住它并将其存储到变量中的字符串,然后通过枚举将其值传递到多个单元格中.截至目前,这是我的代码:
keyart = str(filedialog.askopenfilename(title="Please select a Keyart file"))
for ws2 in wb2.worksheets:
if keyart == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=7).value = keyart
vision = str(filedialog.askopenfilename(title="Please select a Video file"))
for ws2 in wb2.worksheets:
if vision == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=8).value = vision
audio = str(filedialog.askopenfilename(title="Please select a Audio file"))
for ws2 in wb2.worksheets:
if audio == "":
break
else:
for index, row in enumerate(ws2.rows, start=2):
ws2.cell(row=index, column=9).value = audio
但是当我预览生成的 Excel sheet 时,它每次都在每列中粘贴了“随机”数量的值,从而产生了这种阶梯效果:
基本上,C 行和 D 行的行数正确,而其他行则没有。我的代码产生这种效果有什么问题,我该如何更正它以便它枚举值并将值传递到正确的行?
据推测,每次修改最后一行时,OpenPyxl 数据模型中可能会添加一行。也许尝试只获取一次行数? (我将您的 for 循环清理为 if
,假设您在工作簿中只有一个工作表。如果不是这种情况,您将必须提前获取每个工作表的行数。)
ws = list(wb2.worksheets)[0] # grab a reference to the first worksheet
n_rows = len(ws.rows) # count the current number of rows
keyart = str(filedialog.askopenfilename(title="Please select a Keyart file"))
if keyart:
for index in range(2, n_rows):
ws.cell(row=index, column=7).value = keyart
# repeat for vision with column = 8
# repeat for audio with column = 9