【发布时间】:2015-06-10 03:40:59
【问题描述】:
我有一个包含 5 张工作表的 Excel 文件(.xls 格式),我想用我的 pandas 数据框的内容替换第 5 张工作表的内容。
【问题讨论】:
我有一个包含 5 张工作表的 Excel 文件(.xls 格式),我想用我的 pandas 数据框的内容替换第 5 张工作表的内容。
【问题讨论】:
根据您的上述需求,您将需要同时使用 Python(导出 pandas 数据框)和 VBA(删除现有工作表内容并复制/粘贴外部数据)。
使用 Python:使用 to_csv 或 to_excel 方法。我推荐 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=',')
幸运的是,在 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
或者,您也可以反之亦然:使用 Python 运行宏 (ClearExistingContent)。确保您的 Excel 文件是启用宏的 (.xlsm) 文件,其中保存了宏以仅删除工作表 5 的内容。注意:宏不能与 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()
【讨论】:
writer = ExcelWriter('Corner_Export.xlsx') df_Entry.to_excel(writer, 'Sheet1') df_Apex.to_excel(writer, 'Sheet2') df_Exit.to_excel(writer, 'Sheet3') writer.save()ImportError: No module named openpyxl
openpyxl。
或者你可以这样做:
your_df.to_excel( r'C:\Users\full_path\excel_name.xlsx',
sheet_name= 'your_sheet_name'
)
【讨论】:
我测试了此处找到的先前答案:假设我们希望保留其他四张纸,此处先前的答案不起作用,因为其他四张纸已被删除。如果我们希望他们继续使用 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()
【讨论】: