Openpyxl-如何将数据范围从excel工作表复制到另一个工作表



我正试图将一系列基于行坐标的数据从一张图纸复制到另一张图纸。

我有一个带有行坐标的列表tbrow = [1, 34, 52, 75, 101]

我想做的是从以下位置复制行范围:

从片材0到片材1的1到34,

从片材0到片材2的34到52,

从片材0到片材3的52到75,

75至101,从片材0至片材4。

到目前为止,我尝试了以下内容:

-获取主页0

sheet0 = wb["Sheet"]

然后我将纸张存储在一个变量中,忽略第一张纸张

sheets = wb.worksheets[1:]

最后,我尝试复制给定的值。

for i in range(tbrow[i],tbrow[i]+1) for j in range(1,sheet0.max_column+1): for k in sheets: k.cell(row=i, column=j).value = sheet0.cell(row=i, column=j).value

问题是,我只将第一行复制到其余的工作表中,而不是整个范围。(1-34;34-52等等(我错过了什么?

有人能帮我整理一下这里的逻辑吗?或者提供解决方案?

谢谢!

更新

另一种方法是对列表进行切片。

a,b = tbrow[:2] for i in range(a,b): for j in range(1,sheet1.max_column+1): for k in sheets: k.cell(row=i, column=j).value = sheet1.cell(row=i, column=j).value

但这只需要列表中的前两行坐标,我想转到列表中的下一项:

-从第一个到第二个

-从第二个到第三个

-从第三到第四

等等–

我在代码中注意到的问题是range方法中i的值。range方法中的i与for循环中使用的i不同。我假设您必须有一个i=0的全局定义,然后它不会更新,因此只有第一行被复制到下一张工作表。

for i in range(tbrow[i],tbrow[i]+1):#------here
for j in range(1,sheet0.max_column+1):
for k in sheets:
k.cell(row=i, column=j).value = sheet0.cell(row=i, column=j).value

考虑使用一个函数,其中u可以传递行的值

def addRowsToSheet(lb,ub):
for i in range(lb,ub):#------here
for j in range(1,sheet0.max_column+1):
#consider using switch case, instad of the loop
switch (ub):
case 34:
sheets[0].cell(row=i, column=j).value = sheet0.cell(row=i, column=j).value;
sheets[1].cell(row=i, column=j).value = sheet0.cell(row=i, column=j).value;
case 52:
sheets[2].cell(row=i, column=j).value = sheet0.cell(row=i, column=j).value;
#Do the same logic below
#calls
for i in range(0,len(tbrow)-1):
addRowsToSheet(tbrow[i],tbrow[i+1])

相关内容

最新更新