2013-08-08 23 views
17

cố gắng gọi một tập lệnh python trên Vba và tôi là newb. Tôi đã thử chuyển đổi kịch bản chính thành exe sử dụng py2exe và sau đó gọi nó từ VBA (shell) nhưng kịch bản chính gọi các kịch bản khác do đó nó trở nên phức tạp và tôi sai nó lên (exe của tôi không hoạt động). Bên cạnh đó, kịch bản chính là một tập tin lớn và tôi không muốn sửa đổi nó rất nhiều.Làm thế nào để gọi kịch bản python trên excel vba?

Tóm tắt, có cách nào để gọi tập lệnh chính từ vb excel không, mà không chuyển đổi tập lệnh thành tệp exe.

Cho đến nay, tôi đã cố gắng:

RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile") 

Nó bắt đầu python.exe nhưng không có gì khác. Sau đó, tôi đã thử:

RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py") 

Bắt đầu nhắc lệnh nhưng thậm chí không bắt đầu trăn.

P.S. Tôi đã kiểm tra tất cả các câu hỏi liên quan trong diễn đàn, họ không giải quyết vấn đề của tôi.

Trả lời

14

Hãy thử điều này:

RetVal = Shell("<full path to python.exe> " & "<full path to your python script>") 

Hoặc nếu kịch bản python là trong thư mục tương tự như bảng tính, sau đó bạn có thể thử:

RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>") 

Tất cả các chi tiết trong <> sẽ được đưa ra. <> - cho biết các trường có thể thay đổi

Tôi đoán điều này sẽ hoạt động. Nhưng sau đó một lần nữa, nếu kịch bản của bạn sẽ gọi các tệp khác nằm trong các thư mục khác nhau, nó có thể gây ra lỗi trừ khi tập lệnh của bạn xử lý đúng cách. Hy vọng nó giúp.

+0

Tôi đã cố gắng này. Nó bắt đầu trình thông dịch python nhưng không làm gì khác. Tôi tin rằng "shell" chỉ chạy các tệp exe và không cho phép tôi chạy tập lệnh của mình. –

+3

Xin lỗi, tôi không biết mình đã làm gì sai trước đây. Nó hoạt động ngay bây giờ. Cảm ơn rất nhiều! Tôi sử dụng: RetVal = Shell ("C: \ python27 \ python.exe C: \ Python27 \ CallOptimizer.py") –

+0

@EgeOzlem bạn có thể vui lòng chia sẻ một mẫu của kịch bản python của bạn, rằng bạn đã thực hiện từ VBA? và những gì nó đã quay trở lại cuộc gọi VBA? – ggupta

4

Có một vài cách để giải quyết vấn đề này

Pyinx - một công cụ khá nhẹ cho phép bạn gọi Python từ withing quá trình không gian excel http://code.google.com/p/pyinex/

Tôi đã sử dụng điều này một vài năm trước (trở lại khi nó đã được tích cực phát triển) và nó làm việc khá tốt

Nếu bạn không nhớ trả tiền, điều này có vẻ khá tốt

https://datanitro.com/product.html

Tôi chưa bao giờ sử dụng nó mặc dù


Mặc dù nếu bạn đã ghi chép lại ở Python, có thể bạn có thể thả nổi trội hoàn toàn và làm mọi thứ trong python tinh khiết? Nó dễ dàng hơn nhiều để duy trì một cơ sở mã (python) thay vì 2 (python + bất kỳ lớp phủ excel nào bạn có).

Nếu bạn thực sự phải xuất dữ liệu của mình thành excel, thậm chí có một số công cụ khá tốt cho điều đó trong Python. Nếu điều đó có thể làm việc tốt hơn cho tôi biết và tôi sẽ nhận được các liên kết.

+0

Cảm ơn các đề xuất. Tôi không thể bỏ hoàn toàn excel vì dự án này nhạy cảm về thời gian, mã python được phát triển bởi người khác và tôi cần phát triển một giao diện đơn giản cho mã này và tôi không có kinh nghiệm trong Python. Cách tốt nhất cho tôi là sử dụng VBA. Có lẽ, trong tương lai tôi có thể xem xét điều đó. Cảm ơn mặc dù. –

+0

Tôi có thể đề nghị DataNitro. Tích hợp tuyệt vời. Bit đắt tiền mặc dù – Joop

1

Bạn cũng có thể thử ExcelPython cho phép bạn thao tác đối tượng Python và mã gọi từ VBA.

-1

Hãy thử điều này:

retVal = Shell("python.exe <full path to your python script>", vbNormalFocus) 

thay <full path to your python script> với đường dẫn đầy đủ

+0

nên nói RetVal = Shell ("python.exe <đầy đủ đường dẫn đến python script>", vbNormalFocus) và thay thế với đường dẫn đầy đủ đến kịch bản của bạn. –

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