简体   繁体   English

熊猫数据框到 Excel 工作表

[英]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_csvto_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM