2013-10-21 19 views
5

これは少し難しいかもしれませんが、pythonwinや他のモジュールを使って、Pythonスクリプトを使ってMS Excel(またはVBAを使用する他のMS Office製品)でVBAを作成する可能性があります。Pythonを使ってVBAスクリプトを書くには?

このアイデアは、pythons openpyxlモジュールが列の自動幅を実行できないことに由来しています。私が持っているスクリプトは、メモリにブックを作成し、最終的にディスクに保存します。かなりの枚数があり、各シートにはかなりの数の列があります。私は思った....私はちょうどPythonを使用してVBAスクリプト(メモ帳などのどこかに保存されている)をExcelのVBAエディタにインポートし、pythonwinを使ってPythonからそのスクリプトを実行するとどうなりますか?

ような何か:

Workbooks.worksheets.Columns("A:Z").EntireColumn.Autofit 

を使用すると、コメントする前に、はい、私はopenpyxlで列を調整する自動回避する方法の神託の例をたくさん見てきましたが、私は機能を利用していたことができますいくつかの興味深い機会を参照してくださいあなたはVBAから入手できますが、これはPythonで利用できないかもしれません。

とにかく、私はインターネットの周りを少し掘りました。私ができることを何も見ていないので、私は頼むと思っていました。

乾杯、 マイク

+0

はい、Pythonを使用して、おそらく_any_他の言語のプログラムを別の言語で書くことができます。 – martineau

+2

オートフィットを実行するためにExcelを起動する場合は、自動化を使用して全体を作成することができます。その後、動的コード生成を行う必要はありません。 –

+0

この質問はほこりが多少ありますが、おそらくこれが役立つかもしれません:https://www.pyxll.com/docs/macros.html – AnyOneElse

答えて

5

はい、それは可能です。 that Microsoft KBでVBからVBAマクロを生成する方法を調べることができます。

以下のPythonコードは、同じことを行う方法を示しています。それは、KBのサンプルコードの最初の半分の基本的なポートです:

import win32com.client as win32 

import comtypes, comtypes.client 

xl = win32.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
ss = xl.Workbooks.Add() 
sh = ss.ActiveSheet 

xlmodule = ss.VBProject.VBComponents.Add(1) # vbext_ct_StdModule 

sCode = '''sub VBAMacro() 
     msgbox "VBA Macro called" 
     end sub''' 

xlmodule.CodeModule.AddFromString(sCode) 

あなたが目に見える自動化されたExcelのマクロで見ることができ、あなたは上で定義されVBAMacroが表示されます。

+0

私は機会があります今日はコードを試してみる。貢献してくれてありがとう。これは私を正しい方向に進んでいます。私はこのコードが助けになるかもしれない多くの他のアイデアを持っています。 – Mike

+0

@あなたも大歓迎です。 – Boud

+0

私は不思議です。私は自分のコード全体でopenpyxlを使用しています。私はそれを変更したくありません。私は、私はすべてのコードを実行し、ブックを作成してディスクに保存できると思っています。私のコードの終わりにそのブックをつかんで、win32を使ってコードを実行し、その時点でサブプロセスを追加する方法はありますか?私は上記のようにEnsureDispatchを使用してインスタンスを開くのではなく、win32で既存のExcelシートを開くのに苦労しています。 – Mike

関連する問題