2015-04-05 28 views

Trả lời

26

Từ nhu cầu trên của bạn, bạn sẽ cần phải sử dụng cả hai Python (để xuất khẩu gấu trúc khung dữ liệu) và VBA (để xóa nội dung trang tính hiện có và sao chép/dán dữ liệu ngoài).

Với Python: sử dụng phương thức to_csv hoặc to_excel. Tôi khuyên bạn nên sử dụng phương thức to_csv hoạt động tốt hơn với bộ dữ liệu lớn hơn.

# 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=',') 

Với VBA: copypaste nguồn đến phạm vi đích.

May mắn thay, trong VBA bạn có thể gọi các kịch bản Python bằng Shell (giả sử HĐH của bạn là 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 

Hoặc, bạn có thể làm ngược lại: chạy macro (ClearExistingContent) bằng Python. Đảm bảo tệp Excel của bạn là một tệp được bật macro (.xlsm) có macro được lưu để chỉ xóa nội dung Bảng 5. Lưu ý: không thể lưu macro bằng tệp 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() 
+0

Muốn một cái gì đó mà python có thể làm một mình mà không sử dụng VBA nhưng không thể có được nó .. Điều này làm việc tốt mặc dù :). –

+0

Hey @Parfait Tôi đã sử dụng mã này (đã sửa đổi cho nhu cầu của riêng tôi) Cảm ơn bạn :) nhưng tôi nhận được lỗi này: '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: Không có mô-đun có tên openpyxl' – OParker

+1

StackOverflow, món quà tiếp tục tặng! :) Có vẻ như lỗi của bạn có thể không liên quan đến mã được liệt kê. Bạn đang nhập mô-đun được gỡ cài đặt hoặc khai báo sai. Giải pháp này không sử dụng 'openpyxl'. – Parfait

0

Kiểm tra chức năng to_excel của gấu trúc. Bạn phải đặt tên cho sheet mà bạn muốn viết thư cho - có lẽ nó được gọi là "Bảng 5"

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.to_excel.html

+1

điều này sẽ xóa tất cả các trang tính khác của tôi. không hữu ích –

+0

ouch. Trong trường hợp đó tôi muốn giới thiệu các gói xlwt http://www.python-excel.org/ Thật không may tài liệu là sparce, và sẽ yêu cầu một số công việc để ép buộc khung dữ liệu để một cái gì đó xlwt có thể xử lý. Nó có thể xem xét nguồn để có được những gì bạn muốn. Cũng lưu ý, nó chỉ xử lý các tệp * .xls chứ không phải * .xlsx. – Jody

+0

Cảm ơn bạn đã trả lời. Tôi đã đi qua các tài liệu hướng dẫn của xlwt một vài ngày trước và không thể tìm ra một cách dễ dàng để làm nhiệm vụ. Vì vậy, tôi quyết định làm nhiệm vụ này trong VBA và thả hoàn toàn python. đó là một miếng bánh trong VBA. :) muốn nó đã được dễ dàng trong python cũng –