2016-11-17 7 views
0

編集:これは同じ質問ですが、私はそれを書き直したので、読みやすくなっています。VBA経由でPythonスクリプトを実行し、アクティブブックの名前とパスを指定しますか?

私は既にこのポストを試してみました:How to call python script on excel vba?

そして、このポスト:Run and execute a python script from VBA

そして、このポスト:How can I call python program from VBA?

しかし、答えのどれも私のために働かないと私は私は何見当がつかない間違っている。問題1:VBAからpythonスクリプトを実行したい。 Excelファイルには家の場所がありません(デスクトップ上に置くことができます)。私が使用したいコード:

Dim Ret_Val 
Ret_Val = Shell("C:\python27\python.exe \\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py") 

pythonファイルは、常にサーバー上で同じパスを使用します。私はここでワットが間違っているのが見えない?私が得るのは黒いパイソンのスクリーンだけです。私は、ブックと正しいシートを呼び出すのpythonファイルで

:Excelワークブックのパスはpythonでハードコードされた瞬間に

book = xlrd.open_workbook("//10.31.13.22/SharedDocs/3 - Technical/1 - Projects/0 - Internal/RPA 138 - Engineering software/testchipdescription/upload to database/testchipdescription-template-10-11.xltm") 
sheet = book.sheet_by_name("Database") 

。これは私を問題2に戻します:エクセルワークブックの名前とパスを何とか私のpythonスクリプトに渡すことはできますか?

編集:

コマンドプロンプトでshell()コードを試しました。 VBAと同じ:

"C:\python27\python.exe \\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py" 

これは機能しません。 'システムは指定されたパスを見つけることができません'。

私はこの1つ試してみました:

C:\python27\python.exe "\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py" 

をそして、それは働きます!したがって、cmdはパス内のスペースを処理する必要があります。 "しかし、私はVBAでそれらを追加することはできません。それ以外の場合は2 ""は配置できません。

答えて

0

アクティブなワークブックの名前とパスを、このアクティブブックから呼び出すPythonスクリプトに渡すことが可能かどうかは疑問でしたか?

はい。 You can pass argument(s) to SHELL function from VBAと入力し、引数を受け入れて何かを行うようにPythonスクリプトを修正する必要があります。

Python Read from Stdin with Arguments

Python read from command line arguments or stdin

+0

これらのヒントをありがとう。私は自分の質問が漠然としていることを理解していますが、質問をする前に本当に最初に見ています。私はシェルのことは聞いたことがない。だから、ありがとう、私はそれを探します! – VeVi

+0

VBAコードを実際に表示した場合は、手助けする方が簡単です。つまり、あなたがやろうとしていることを推測しなければならないし、VBAにRetVal関数もないので、あなたは 'RetVal = Shell(" shell command ")'。何らかの形で 'Shell'をまだ使っていないのであれば、あなたが何をしようとしているのか、VBAからPythonオブジェクトを呼び出す方法が分かりません。 [あなたの質問を改訂してさらに説明してください](http://stackoverflow.com/posts/40657992/edit)これで問題が解決しない場合は、 –

0

はい、私は問題1のための解決策を見つけた:

Dim excelToPython As String 
excelToPython = """C:\python27\python.exe"" ""\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py""" 
Debug.Print excelToPython 
Call Shell(excelToPython) 

https://bytes.com/topic/access/answers/520558-problem-shell-space-file-name

EDIT 'アラン・ブラウン' への感謝:

最後に、私問題2の回避策を見つけました。シェルコマンドを使用してPythonスクリプトにアクティブなワークブックの名前とパスを渡すための本当の解決策はまだありません。

しかし私は、アクティブなワークブックのパスと名前を、私のpythonスクリプトと同じフォルダにあるtxtfileに書きます。そして私は私のpythonscript et voilaでこの情報を得ます。それは動作します!それは私の望むことですが、それはきれいな解決策ではありません。誰かが正解を知っている場合、それを共有すること自由に感じなさい:O)

私の回避策ソリューション:VBA-Excelで

コード:Pythonで

'via pythonscript' 

Dim excelToPython As String 
Dim myFileTxt As String 
Dim fileTxtPath As String 

'first give the name and path of active workbook to a txtfile in the same folder as ThemeColor pythonscript' 

fileTxtPath = "\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\actWBdb.txt" 

myFile = FreeFile 

Open fileTxtPath For Output As myFile 

nameWB = ActiveWorkbook.name 
pathWB = ActiveWorkbook.path 

Print #myFile, nameWB 
Print #myFile, pathWB 

Close myFile 

'run the python file' 
excelToPython = """C:\python27\python.exe"" ""\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py""" 

Call Shell(excelToPython) 

コード:

filepath ='//10.31.13.22/SharedDocs/3 - Technical/13 - Reports & Templates/13 - Description/actWBdb.txt' 
lines = open(filepath).read().splitlines() 
nameWorkbook = lines[0] 
pathWorkbook = lines[1] 

book = xlrd.open_workbook(pathWorkbook + '/' + nameWorkbook) 
sheet = book.sheet_by_name("Database") 
関連する問題