gpt4 book ai didi

python (openpyxl) : Put data from one excel file to another (template file) & save it with another name while retaining the template

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:27 27 4
gpt4 key购买 nike

我有一个名为 template.xlsxtemplate excel 文件,其中包含许多工作表。我想将数据从单独的 .csv 文件复制到 template.xlsx 的第一张表中(命名为 data) 并将新文件保存为 result.xlsx,同时保留原始模板文件。

我想从 template.xlsxdata 表中的第二行开始粘贴数据

这是我到目前为止开发的代码

import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
import openpyxl
from shutil import copyfile

template_file = 'template.xlsx' # Has a header in row 1 already which needs to be skipped while pasting data but it should be there in the output file
output_file = 'result.xlsx'

copyfile(template_file, output_file)
df = pd.read_csv('input_file.csv') #The file which is to be pasted in the template

wb = openpyxl.load_workbook(output_file)
ws = wb.get_sheet_by_name('data') #Getting the sheet named as 'data'

for r in dataframe_to_rows(df, index=False, header=False):
ws.append(r)

wb.save(output_file)

我无法获得所需的输出

左边是模板文件(多了一行),右边是输入文件(要复制到模板的数据),看起来像这样

template enter image description here

最佳答案

实际上没有任何必要使用 shutil 模块,因为您可以只使用 openpyxl.load_workbook 来加载您的模板,然后用不同的名称保存。

此外,ws.append(r) 在您的 for 循环中将追加到从 template.xlsx 获取的现有数据,听起来您只想保留标题。

我在下面提供了一个完全可重现的示例,该示例创建了“template.xlsx”以供演示之用。然后加载“template.xlsx”并向其添加新数据并保存为 result.xlsx。

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.chart import PieChart, Reference, Series
import pandas as pd

template_file = 'template.xlsx'
output_file = 'result.xlsx'

#This part creates a workbook called template.xlsx with a sheet called 'data' and sheet called 'second_sheet'
writer = pd.ExcelWriter('template.xlsx', engine='openpyxl')
wb = writer.book
df = pd.DataFrame({'Pie': ["Cream", "Cherry", "Banoffee", "Apple"],
'Sold': [2, 2, 1, 4]})

df.to_excel(writer, index=False, sheet_name='data', startrow=1)
ws = writer.sheets['data']
ws['A1'] = 1
ws['B1'] = 2

ch = PieChart()
labels = Reference(ws, min_col=1, min_row=3, max_row=6)
data = Reference(ws, min_col=2, min_row=3, max_row=6)
ch.series = (Series(data),)
ch.title = "Pies sold"
ws.add_chart(ch, "D2")

ws = wb.create_sheet("Second_sheet")
ws['A1'] = 'This Sheet will not be overwitten'

wb.save(template_file)

#Now we load workbook called template.xlsx modify the 'data' sheet and save under a new name
#template.xlsx has not been modified

df_new = pd.DataFrame({'different_name': ["Blueberry", "Pumpkin", "Mushroom", "Turnip"],
'different_numbers': [4, 6, 2, 1]})

wb = load_workbook(template_file)

ws = wb.get_sheet_by_name('data') #Getting the sheet named as 'data'

rows = dataframe_to_rows(df_new, index=False, header=False)

for r_idx, row in enumerate(rows, 1):
for c_idx, value in enumerate(row, 1):
ws.cell(row=r_idx+2, column=c_idx, value=value)

wb.save(output_file)

预期输出:

Expected Output for the two workbooks

关于 python (openpyxl) : Put data from one excel file to another (template file) & save it with another name while retaining the template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com