Вы можете использовать pd.read_excel
для чтения в рабочей книге нужных вам данных, в вашем случае это «test1.xlsx». Затем вы можете использовать openpyxl.load_workbook()
, чтобы открыть существующую книгу с заголовком, в вашем случае это «merge1.xlsx». Наконец, вы можете сохранить новый рабочий блок под новым именем ('test3.xlsx') без изменения двух существующих рабочих книг.
Ниже я привел полностью воспроизводимый пример того, как вы можете это сделать. Чтобы сделать этот пример полностью воспроизводимым, я создаю 'merge1.xlsx' и 'test1.xlsx'.
Обратите внимание, что если в вашем 'merge1.xlsx', если у вас есть только заголовок, который вы хотите, и ничего больше в файле, вы можете использовать две строки, которые я оставил закомментированными ниже. Это просто добавит ваши данные из «test1.xlsx» в заголовок «merge1.xlsx». Если это так, то вы можете избавиться от двух из-за ляпов в конце. В противном случае, как в моем примере, это немного сложнее.
При создании 'test3.xlsx' мы перебираем каждую строку и определяем, сколько там столбцов, используя len(df3.columns)
. В моем примере это равно двум, но этот код также будет работать для большего числа столбцов.
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1 = pd.DataFrame()
writer = pd.ExcelWriter('merge1.xlsx') #xlsxwriter engine
df1.to_excel(writer, sheet_name='Sheet1')
ws = writer.sheets['Sheet1']
ws.merge_range('A1:C1', 'This is a merged cell')
ws.write('A3', 'some string I might not want in other workbooks')
writer.save()
df2 = pd.DataFrame({'col_1': [1,2,3,4,5,6], 'col_2': ['A','B','C','D','E','F']})
writer = pd.ExcelWriter('test1.xlsx')
df2.to_excel(writer, sheet_name='Sheet1')
writer.save()
df3 = pd.read_excel('test1.xlsx')
wb = load_workbook('merge1.xlsx')
ws = wb['Sheet1']
#for row in dataframe_to_rows(df3):
# ws.append(row)
column = 2
for item in list(df3.columns.values):
ws.cell(2, column=column).value = str(item)
column = column + 1
for row_index, row in df3.iterrows():
ws.cell(row=row_index+3, column=1).value = row_index #comment out to remove index
for i in range(0, len(df3.columns)):
ws.cell(row=row_index+3, column=i+2).value = row[i]
wb.save("test3.xlsx")
Ожидаемый результат 3 рабочих книг: