如何使用openpyxl库使用python将列从一个excel工作表复制到另一个excel工作表?

2024-10-03 04:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我是编程新手。我试图将列从一个excel工作表复制到另一个excel工作表,但我的代码有问题,因为只有最后一列数据被复制到目标文件。我已经附上了代码和我一直得到的结果

Jan_2020 ="C:\\Users\\yaxee\\OneDrive\\Desktop\\NBET 
Extraction data\\JANUARY 2020.xlsx"
wb1 = xl.load_workbook(Jan_2020)
ws1 = wb1.worksheets[0]

Extraction_WB ="C:\\Users\\yaxee\\OneDrive\\Desktop\\ExtractionWB.xlsx"
wb2 = xl.load_workbook(Extraction_WB)
ws2 = wb2.worksheets[0]

#copy from wb1
for i in range(4, 34):
    c = ws1.cell(row = i, column = 4)
#paste in ws2
for j in range(3, 33):
    ws2.cell(row = j, column = 4).value = c.value
wb2.save(str(Extraction_WB))

资料来源表: Source sheet

目的地页: enter image description here


Tags: 代码inonedrivexlsxexcelusersjandesktop
2条回答

你不需要两个循环。您只是不断重写c的值,直到它具有列的最后一个值

然后,您只需将该值写入第二张工作表的所有行

相反,使用一个循环,从当前行读取单个值,并将其写入第二张工作表中的相应行:

for row in range(4, 34):
    #copy from wb1
    c = ws1.cell(row=row, column=4)
    #paste in ws2
    ws2.cell(row=row-1, column=4, value=c.value)

如果在图纸之间有一些常规转换,则可以采用以下更通用的方法:

step = 2
read_start_row = 4
write_start_row = 3
amount_of_rows = 30

for i in range(0, amount_of_rows, step):
    #copy from wb1
    c = ws1.cell(row=read_start_row+i, column=4)
    #paste in ws2
    ws2.cell(row=write_start_row+(i/step), column=4, value=c.value)

如果我理解您的需要,您需要将第二个循环放在第一个循环中,以便复制整个行范围。这样行吗?韩元

#copy from wb1
for i in range(4, 34):
    c = ws1.cell(row = i, column = 4)
    #paste in ws2
    for j in range(3, 33):
        ws2.cell(row = j, column = 4).value = c.value
wb2.save(str(Extraction_WB))

相关问题 更多 >