运行报错:
Traceback (most recent call last):
File "F:/新建文件夹 (3)/合并.py", line 9, in
cell.value = copy.next()[0].value
StopIteration
import openpyxl as ox
wordbook = ox.load_workbook(filename="panda.xlsx")
sheet1 = wordbook['Sheet1']
copy = sheet1.iter_rows(min_row=1, max_row=10, min_col=1, max_col=10)
wordbook2 = ox.load_workbook(filename="1.xlsx")
sheet2 = wordbook2['Sheet2']
for i, row in enumerate(sheet2.iter_rows(min_row=1, max_row=10, min_col=1, max_col=10)):
for j, cell in enumerate(row):
cell.value = copy.__next__()[0].value
wordbook2.save(filename="panda111.xlsx")
if copy:
# 当这个 copy 不为空的时候再进行
cell.value = next(copy)[0].value
else:
# 为空的时候 cell.value = ?
可以试试
【以下回答由 GPT 生成】
报错的原因是使用了StopIteration
错误。这个错误通常在使用迭代器的时候出现,表示迭代器没有更多的元素可以返回了。
在上述代码中,copy
是一个迭代器对象,当你在内循环中使用copy.__next__()
时,如果迭代器已经没有更多元素可以返回,就会抛出StopIteration
错误。
解决这个问题可以采取以下两种方法之一:
方法一:使用itertools.islice
函数
可以使用itertools.islice
函数来限制迭代器的长度,确保不会超出范围。将第一个for
循环替换为以下代码:
import itertools
copy = itertools.islice(sheet1.iter_rows(min_row=1, max_row=10, min_col=1, max_col=10), 10)
这样可以确保copy
迭代器只有10个元素。
方法二:使用zip
函数
可以使用zip
函数将两个迭代器打包在一起,然后使用zip_longest
函数确保两个迭代器长度一致。将第二个for
循环替换为以下代码:
import itertools
for i, (row, copy_row) in enumerate(zip(sheet2.iter_rows(min_row=1, max_row=10, min_col=1, max_col=10), copy)):
for j, (cell, copy_cell) in enumerate(zip(row, copy_row)):
cell.value = copy_cell.value
这样可以确保在每次迭代时,copy
迭代器只返回与sheet2
相应行的元素。
无论你采用哪种方法,都需要确保两个迭代器的长度是一致的,否则可能会抛出StopIteration
错误。
【相关推荐】