2010-01-26 40 views
23

Gần đây tôi đã lấy nó làm dự án để tự dạy mình cách lập trình bằng Python. Nói chung, tôi phải nói rằng tôi ấn tượng với nó.Sử dụng Python để lập trình các macro MS Office?

Trước đây, tôi thường gặp khó khăn trong việc lập trình trong VBA chủ yếu cho MS Excel (nhưng cũng có một chút trong MS Access và Word) và đã cố gắng tìm cách để làm cho nó làm những việc mà Python có thể dễ dàng thực hiện với một chỉ huy.

Tôi đã tự hỏi nếu có một cách hợp lý để khai thác sức mạnh lập trình và dễ dàng của Python trong khi đồng thời sử dụng các công cụ khác nhau trong Office (chủ yếu là Excel)?

+1

Tôi luôn tự hỏi nếu nó có thể làm danh sách/dicts để hàng/cột hoặc bao gồm numpy và excel, hoặc có lẽ pyqt + numpy như một excel addin – dassouki

+0

Xem http://stackoverflow.com/questions/441758/driving- excel-from-python-in-windows/445961 # 445961 – codeape

+0

Đây là tất cả thông tin tuyệt vời, nó chắc chắn mang lại cho tôi một hướng (thực sự nhiều hơn sau đó một) để đi vào. Tôi không thể tìm thấy bất kỳ câu trả lời tương tự ở nơi khác trên SO, nhưng rõ ràng không sử dụng đúng từ khóa. – Jesse

Trả lời

7

Có một bộ tiện ích Python đa nền tảng - được gọi là xlrd, xlwt và xlutils - để đọc & ghi tệp Excel. Có một số hạn chế (ví dụ: tôi không nghĩ rằng họ có thể xử lý macro), nhưng chúng cho phép bạn làm việc với các tệp Excel trên nền tảng không phải Windows, nếu đó là sử dụng cho bạn. Xem: http://www.python-excel.org/

Ngoài ra, có SO câu hỏi đã đối phó với loại này của chủ đề, bao gồm này: Is there a better way (besides COM) to remote-control Excel?

18

Có, tuyệt đối. Bạn muốn sử dụng mô-đun win32com, là một phần của pywin32 (get it here).

Tôi thấy bạn thực sự có thể đơn giản hóa tích hợp Python bằng cách viết macro trong VBA cho Python để sử dụng, và sau đó chỉ cần Python gọi macro. Nó sẽ trông giống như sau:

from win32com.client import Dispatch as comDispatch 

xl = comDispatch('Excel.Application') 
xl.Workbooks.Open("Macros.xls", False, True) 
xl.Run("Macros.xls!Macro_1") 

Tôi chắc chắn có rất nhiều ví dụ về SO ... như this one.

7

Hoặc xem IronPython. IPy là bản thực thi .NET gốc của Python 2.6, bạn có thể tìm thấy nó tại http://www.codeplex.com/ironpython.

Chúng tôi đã sử dụng nó cho một số dự án. Bạn có thể sử dụng nó "từ bên ngoài" bằng cách sử dụng COM hoặc - như chúng tôi làm - viết một Excel AddIn với một ScriptHost, mà gọi ra mã IronPython cho bạn một môi trường tương tự như VBA.

Là tệp .dll .NET, IPy tích hợp rất tốt vào ngăn xếp Windows .NET hiện đại.

+0

Tôi cũng nghĩ đây thực sự là giải pháp tốt nhất. Nếu bạn đi tuyến đường này, bạn có thể tải xuống [Visual Studio Shell (tích hợp)] (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8e5aa7b6-8436-43f0-b778-00c3bca733d3&displaylang=vi) miễn phí và sau đó tải xuống [công cụ python sắt] (http://ironpython.net/tools/) cho studio trực quan. – oob

+0

Tôi biết đây là ngày, nhưng bạn có thể vui lòng cung cấp một số ví dụ không? – jhexp

4

Các xlrd, xlwt, và xlutils gói nêu trên chỉ có thể đọc và ghi các file .xls có giới hạn kích thước của 65.000 hàng và 256 cột. Bên cạnh đó nó là một công cụ tốt.

Nhưng tôi đã chuyển sang gói python-excel khác, OpenPyXL, có thể đọc và ghi các tệp .xlsx. Ngoài ra tôi thấy nó dễ sử dụng và tài liệu là tốt.

OpenPyXL: http://packages.python.org/openpyxl/index.html

2

đây là một liên kết hữu ích:

http://continuum.io/using-excel

  1. Hãy thử Pyvot - Một Python đến/từ Excel nối từ Microsoft:

http://pytools.codeplex.com/wikipage?title=Pyvot

Tôi cũng thực sự thích PTVS từ cùng một nhà phát triển.nhóm, cung cấp gỡ lỗi tốt nhất trong Python mà tôi đã trải nghiệm cho đến nay.

2.

Những gì bạn có thể làm với VBA + Python được như sau:

Compile script py của bạn mà có đầu vào và tạo ra kết quả đầu ra dưới dạng file văn bản hoặc từ giao diện điều khiển. Sau đó, VBA sẽ chuẩn bị đầu vào cho py, gọi kịch bản py được biên dịch trước và đọc lại đầu ra của nó.

3.

Cân nhắc OpenOffice hoặc LibreOffice hỗ trợ tập lệnh Python.

Điều này giả định rằng các tùy chọn có sẵn với giao diện COM hoặc MS script không thỏa mãn nhu cầu của bạn.

4.

Đây không phải là cách tiếp cận miễn phí, nhưng đáng nói (đặc trưng trong tạp chí Forbes và The New York Times):

https://datanitro.com

5.

Đây không phải là miễn phí cho thương mại sử dụng:

PyXLL - Excel addin cho phép các hàm được viết bằng Python được gọi trong Excel.

1

Đây là câu hỏi từ một thời gian dài trước đây, nhưng tôi đang đặt câu hỏi ở đây để những người khác có thể chỉ vào nó trong tìm kiếm của họ.

Một tùy chọn không được thảo luận ở đây, mà tôi sử dụng mọi lúc, là tạo máy chủ COM từ Python và gọi nó từ VBA trong bất kỳ ứng dụng Office nào. Có một hướng dẫn tốt về việc thực hiện máy chủ COM với Python tại: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html

Điều bạn kết thúc là một máy chủ COM (đừng quên thực hiện Quy trình) có thể được tạo bằng cách gọi tới CreateObject() trong VBA. Sau đó bạn gọi các phương thức trên nó như bạn làm với một đối tượng COM được tạo với CreateObject(). Bạn không thể thực hiện một bước trong kịch bản Python của mình, nhưng bạn có thể chặn ghi nhật ký bằng win32traceutil từ phân phối Pywin32. Hoạt động hoàn hảo.

Các vấn đề liên quan