web-dev-qa-db-ja.com

WindowsでPythonからExcelを駆動

おいしく複雑なマクロとサードパーティの拡張機能を使用して複雑なモデルを作成するさまざまなスプレッドシートがあります。私は、さまざまな入力を少し調整して結果を確認するプロジェクトに取り組んでいます。これを手動で行ったりVBAを書いたりするのではなく、これを駆動するpythonスクリプトを記述できるかどうかを確認したいと思います。つまり、python =スクリプトが起動し、Excelシートをロードしてから、一部のセルに小さな変更を加えて、他のセルにどのように影響するかを確認することにより、シートを操作します。

したがって、私の質問は2つあります。

  • このような方法でpythonからExcelを駆動するために使用する最適なライブラリは何ですか?

  • このライブラリの使用に関する最良のドキュメント/例はどこですか?

乾杯、/ YGA

41
YGA

Excelを制御するには、@ igowenが示唆するように、pywin32を使用します。

静的ディスパッチを使用できることに注意してください。使用する makepy.py pythonモジュールをpythonラッパーで作成します。生成されたラッパーを使用すると、開発が簡素化されます。たとえば、ipythonではタブ補完と開発中に役立ちます。

静的ディスパッチの例:

 x:> makepy.py "Microsoft Excel 11.0 Object Library" 
 ... 
 Generating ... 
 Importing module 
 x:> ipython 
> from win32com.client import Dispatch
> Excel = Dispatch("Excel.Application")
> wb = Excel.Workbooks.Append()
> range = wb.Sheets[0].Range("A1")
> range.[Press Tab]
range.Activate                 range.Merge
range.AddComment               range.NavigateArrow
range.AdvancedFilter           range.NoteText
...
range.GetOffset                range.__repr__
range.GetResize                range.__setattr__
range.GetValue                 range.__str__
range.Get_Default              range.__unicode__
range.GoalSeek                 range._get_good_object_
range.Group                    range._get_good_single_object_
range.Insert                   range._oleobj_
range.InsertIndent             range._prop_map_get_
range.Item                     range._prop_map_put_
range.Justify                  range.coclass_clsid
range.ListNames                range.__class__
> range.Value = 32
...

ドキュメントリンク:

46
codeape

pywin32 を使用してこれを実行しました。実際に抽象化は行われないため、特に楽しい経験ではありません。 VBAを使用するようなものですが、python構文を使用します。docstringに依存することはできないため、MSDN Excelリファレンスを手元に置いておくと便利です( http:// msdn。 Microsoft.com/en-us/library/aa220733.aspx は、私が正しく覚えていれば使用したものです。少し掘り下げると、Excel 2007のドキュメントを見つけることができるはずです。

簡単な例については、 here をご覧ください。

from win32com.client import Dispatch

xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
xlApp.Workbooks.Add()
xlApp.ActiveSheet.Cells(1,1).Value = 'Python Rules!'
xlApp.ActiveWorkbook.ActiveSheet.Cells(1,2).Value = 'Python Rules 2!'
xlApp.ActiveWorkbook.Close(SaveChanges=0) # see note 1
xlApp.Quit()
xlApp.Visible = 0 # see note 2
del xlApp

幸運を!

21
igowen

DataNitro プロジェクト(以前の名前IronSpread)を確認してください。 Python Excel用プラグインです。

8
codeape

私は昨年Python Excelプラグインとして書かれたクライアントを含むホームプロジェクトに取り組みました。このプロジェクトは本質的にエンドユーザーアクセス用に簡素化されたオンラインデータベースです。Excelプラグインによりユーザーは、データベースからデータをクエリして、Excelに表示します。

私はExcelプラグインを使ったことがありませんでした。そのためのコードは少しbitいです。しかし、私が持っているのはBSDライセンスの下にあり、Bazaarから入手可能です。

http://www.launchpad.net/analyz/trunk

私は現在公開サーバーを実行していないため、クライアントは動作しませんが、少なくともこのコードで何をしたかを見て、これがどのように機能するかを理解することができます。このコードは、100%PythonでMFCダイアログを作成する方法も示します。

1
Clint Miller

約1週間を費やしましたが、ここに実装(または概念実証)を示します。 https://github.com/Winand/SimplePython

主なアイデアは、PythonコードをMicrosoft OfficeからVBAマクロと同じくらい簡単に記述および呼び出すことができるようにすることです(アドインはExcel専用です)。

  • クライアントサーバーアーキテクチャ(over TCP)であるため、Pythonは1回だけ開始されます
  • サーバーが実行されていない場合、サーバーは自動起動されます
  • ユーザーがマクロモジュールを変更すると、サーバーはマクロモジュールを自動再読み込みします
  • Officeリボンの使いやすい制御インターフェイス
1
Winand

python WindowsのCOMインターフェイス経由でExcelを操作できるクラス http://sourceforge.net/projects/excelcomforpython/

このクラスはwin32comを使用してExcelと対話します。クラスを直接使用することも、例として使用することもできます。配列数式、条件付き書式設定、チャートなどのように実装された多くのオプション.

1
Alex

pythonをインプロセスとしてExcelに統合するための興味深いプロジェクトがありますDLL

http://opentradingsystem.com/PythonForExcel/main.html

同じ考えに沿ったもう少しシンプルなプロジェクトが次の場所にあります。

http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython

これらのプロジェクトには多くの見込みがあるようですが、さらに開発が必要です。

0
Testautomation