2017-10-26 4 views
0

私は現在、スクリプトを実行するためにPythonを呼び出すVBAでプログラムを実行しています。スクリプトはSQLからダウンロードし、次にVBAで消費される出力を生成するためのアルゴリズムを実行します(私のGUIはExcelで、最終出力はExcelテーブルであるため、このようにしています)。VBAからシェルスクリプトを使ってPythonにPythonを送る

は、私は以下のようにシェルスクリプト経由でPythonの一部を実行している:

Public Const PythonPath = "D:\Anaconda2\Python.exe " 

Set ShellScript = VBA.CreateObject("WScript.Shell") 
Filename = """I:\SQL Downloader_v4.2.py""" 
ShellScript.Run (PythonPath & Filename), windowStyle, waitOnReturn 

これは、SQLデータベースにアクセスするためのユーザー名とパスワードが必要なPythonアプリケーションを起動します。 Pythonは、スクリプト内のraw_inputを使ってユーザ名とパスワードを受け入れるように設定されています。この方法でVBAからPythonにユーザー名とパスワードを送信するにはどうすればよいですか、raw_input経由で行うよりも良い方法はありますか?

+0

xlwingsを見てください、この種のもののために作られています –

答えて

2

コマンドライン引数を使用してユーザー名とパスワードを送信できます。

そうのようなあなたのVBAコードに見えるでしょう:

Public Const PythonPath = "D:\Anaconda2\Python.exe " 

Set ShellScript = VBA.CreateObject("WScript.Shell") 
Filename = """I:\SQL Downloader_v4.2.py""" 
ShellScript.Run (PythonPath & Filename & username & password), windowStyle, waitOnReturn 

あなたはgetoptのと最初の引数を解析することができますPythonスクリプトでは:

import sys 

if sys.argv < 3: 
    print('Missing username and/or password') 
    print('Usage: SQL_Downloader_v4.2.py USERNAME PASSWORD') 
    exit(1) 
username = sys.argv[1] 
password = sys.argv[2] 

... 

多くのためのPythonの標準ライブラリに2つのモジュールがあります。コマンドライン引数の高度な解析:getoptおよびargparse

関連する問題