【问题标题】:Pandas Dataframe to Excel Sheet熊猫数据框到 Excel 表
【发布时间】:2015-06-10 03:40:59
【问题描述】:

我有一个包含 5 张工作表的 Excel 文件(.xls 格式),我想用我的 pandas 数据框的内容替换第 5 张工作表的内容。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    根据您的上述需求,您将需要同时使用 Python(导出 pandas 数据框)和 VBA(删除现有工作表内容并复制/粘贴外部数据)。

    使用 Python:使用 to_csvto_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:copypaste 源到目标范围。

    幸运的是,在 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() 
    

    【讨论】:

    • 想要一些 python 可以在不使用 VBA 的情况下单独完成但无法获得的东西.. 不过效果很好:)。
    • 嘿@Parfait 我使用了这段代码(根据我自己的需要进行了修改)谢谢 :) 但我收到了这个错误: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
    • StackOverflow,不断给予的礼物! :) 看来您的错误可能与列出的代码无关。您正在导入已卸载或错误声明的模块。此解决方案不使用openpyxl
    • OParker,旧错误,但这是因为未安装 xlsxWriter,pandas 默认回退到 openpyxl,这似乎也不存在。 “pip install”应该可以解决您的问题
    【解决方案2】:

    或者你可以这样做:

    your_df.to_excel( r'C:\Users\full_path\excel_name.xlsx',
                      sheet_name= 'your_sheet_name'
                    )
    

    【讨论】:

      【解决方案3】:

      我测试了此处找到的先前答案:假设我们希望保留其他四张纸,此处先前的答案不起作用,因为其他四张纸已被删除。如果我们希望他们继续使用 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()
      

      【讨论】:

        猜你喜欢
        • 2020-12-14
        • 2019-06-05
        • 1970-01-01
        • 2020-06-03
        • 2018-05-24
        • 2020-10-13
        • 2020-07-22
        • 2022-12-10
        相关资源
        最近更新 更多