[英]Pandas Dataframe to Excel Sheet
我有一个包含 5 个工作表的 Excel 文件(.xls 格式),我想用我的 Pandas 数据框的内容替换工作表 5 的内容。
From your above needs, you will need to use both Python (to export pandas data frame) and VBA (to delete existing worksheet content and copy/paste external data).根据您的上述需求,您将需要同时使用 Python(导出 Pandas 数据框)和 VBA(删除现有工作表内容和复制/粘贴外部数据)。
With Python: use the to_csv or to_excel methods.使用 Python:使用to_csv或to_excel方法。 I recommend the to_csv method which performs better with larger datasets.我推荐 to_csv 方法,它在更大的数据集上表现更好。
# DF TO EXCEL
from pandas import ExcelWriter
writer = ExcelWriter('PythonExport.xlsx')
yourdf.to_excel(writer,'Sheet5')
writer.save()
# DF TO CSV
yourdf.to_csv('PythonExport.csv', sep=',')
With VBA: copy and paste source to destination ranges.使用 VBA: 将源 复制并 粘贴到目标范围。
Fortunately, in VBA you can call Python scripts using Shell (assuming your OS is Windows).幸运的是,在 VBA 中,您可以使用 Shell 调用 Python 脚本(假设您的操作系统是 Windows)。
Sub DataFrameImport()
'RUN PYTHON TO EXPORT DATA FRAME
Shell "C:\pathTo\python.exe fullpathOfPythonScript.py", vbNormalFocus
'CLEAR EXISTING CONTENT
ThisWorkbook.Worksheets(5).Cells.Clear
'COPY AND PASTE TO WORKBOOK
Workbooks("PythonExport").Worksheets(1).Cells.Copy
ThisWorkbook.Worksheets(5).Range("A1").Select
ThisWorkbook.Worksheets(5).Paste
End Sub
Alternatively, you can do vice versa: run a macro (ClearExistingContent) with Python.或者,您可以反之亦然:使用 Python 运行宏 (ClearExistingContent)。 Be sure your Excel file is a macro-enabled (.xlsm) one with a saved macro to delete Sheet 5 content only.确保您的 Excel 文件是启用宏 (.xlsm) 的文件,其中保存的宏仅用于删除工作表 5 的内容。 Note: macros cannot be saved with csv files.注意:宏不能与 csv 文件一起保存。
import os
import win32com.client
from pandas import ExcelWriter
if os.path.exists("C:\Full Location\To\excelsheet.xlsm"):
xlApp=win32com.client.Dispatch("Excel.Application")
wb = xlApp.Workbooks.Open(Filename="C:\Full Location\To\excelsheet.xlsm")
# MACRO TO CLEAR SHEET 5 CONTENT
xlApp.Run("ClearExistingContent")
wb.Save()
xlApp.Quit()
del xl
# WRITE IN DATA FRAME TO SHEET 5
writer = ExcelWriter('C:\Full Location\To\excelsheet.xlsm')
yourdf.to_excel(writer,'Sheet5')
writer.save()
Or you can do like this:或者你可以这样做:
your_df.to_excel( r'C:\Users\full_path\excel_name.xlsx',
sheet_name= 'your_sheet_name'
)
I tested the previous answers found here: Assuming that we want the other four sheets to remain, the previous answers here did not work, because the other four sheets were deleted.我测试了此处找到的先前答案:假设我们希望保留其他四张纸,此处的先前答案不起作用,因为其他四张纸已被删除。 In case we want them to remain use xlwings:如果我们希望他们继续使用 xlwings:
import xlwings as xw
import pandas as pd
filename = "test.xlsx"
df = pd.DataFrame([
("a", 1, 8, 3),
("b", 1, 2, 5),
("c", 3, 4, 6),
], columns=['one', 'two', 'three', "four"])
app = xw.App(visible=False)
wb = xw.Book(filename)
ws = wb.sheets["Sheet5"]
ws.clear()
ws["A1"].options(pd.DataFrame, header=1, index=False, expand='table').value = df
# If formatting of column names and index is needed as xlsxwriter does it,
# the following lines will do it (if the dataframe is not multiindex).
ws["A1"].expand("right").api.Font.Bold = True
ws["A1"].expand("down").api.Font.Bold = True
ws["A1"].expand("right").api.Borders.Weight = 2
ws["A1"].expand("down").api.Borders.Weight = 2
wb.save(filename)
app.quit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.