将列从一个工作簿复制到除标题行(第一行)之外的另一个工作簿

问题描述 投票:0回答:1

我一直在尝试将整个列从工作簿1复制到工作簿2,但不包括第一行。如何复制第一行并将结果保存到新工作簿(workbook3)中。

到目前为止我已经得到了以下代码

from openpyxl import load_workbook

wb1 = load_workbook("test1.xlsx")
wb2 = load_workbook("test2.xlsx")

ws1 = wb1.get_sheet_by_name('Sheet1')
ws2 = wb2.get_sheet_by_name('Sheet1')

mr = ws1.max_row
mc = ws1.max_column

for i in range(1, mr + 1):
        ws2['A' + str(i)].value = ws1['A' + str(i)].value
       wb2.save("test1.xlsx")
        wb1.save("test2.xlsx")
python python-3.x openpyxl
1个回答
0
投票

你的第一句话似乎很清楚;
我一直在尝试将整个列从工作簿1复制到工作簿2,但不包括第一行。

那么你的第二句话有些不同;
如何复制第一行并将结果保存到新工作簿(workbook3)中。
第二句是除了第一句之外的一个单独的问题吗?

对于您的代码似乎涵盖的第一句话/问题;复制不包括第一行的列很容易。只需在第 1 行上按

continue
,然后复制其余部分即可。


我对您的代码做了一些更改,因为语法已被弃用或有其他首选方法。

另请注意;

  1. 您只需保存更改的文件即可。正在读取 Excel 文件“test1.xlsx”,因此它没有被更改,不需要保存
  2. wb2,已更改的工作簿,从
    'test2.xlsx'
    打开。您将其另存为原始工作簿
    'test1.xlsx'
    ,这将覆盖原始文件。
from openpyxl import load_workbook

wb1 = load_workbook("test1.xlsx")
wb2 = load_workbook("test2.xlsx")

ws1 = wb1['Sheet1']  # get_sheet_by_name is depreciated use this method instead
ws2 = wb2['Sheet1']

mr = ws1.max_row
# mc = ws1.max_column  # Not used

for i in range(1, mr + 1):
    if i == 1:
        continue
    # ws2['A' + str(i)].value = ws1['A' + str(i)].value
    ### Use f strings, no need to cast
    ws2[f'A{i}'].value = ws1[f'A{i}'].value  # Copy row to row
    # ws2[f'A{i-1}'].value = ws1[f'A{i}'].value  # Copy to row 1 onwards on the destination sheet


### Only need to save the workbook once after all changes are complete, 
### not every time a change is made so this should not be in the loop
# wb2.save("test1.xlsx")  # Overwriting the original workbook???
wb2.save("test2.xlsx")
# wb1.save("test2.xlsx")  # Why save this workbook? Also wrong file name

如果第 2 句是一个单独的问题,并且您只想有效地将第 1 行复制到单元格 A1,则可以像以前一样执行相同的操作,但不需要循环。只需创建一个新工作簿,然后将原始单元格

A1
复制到新单元格
A1
并另存为工作簿名称
workbook3

© www.soinside.com 2019 - 2024. All rights reserved.