Home » Python » pywin32・win32comの使い方 » pywin32を使ってPythonで起動済みExcelを操作する

pywin32を使ってPythonで起動済みExcelを操作する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2007 ビルド13029.20308 Microsoft Store)+ Python 3.8.3 + pywin32 228

pywin32・win32com.clientを使って、Excelを起動するコードをご紹介しました。

もちろん、起動済みのExcelを操作することも可能です。

[スポンサードリンク]

VBA・VBScriptで起動済Excelを操作するサンプル

本題であるPythonの前に、VBAやVBScriptのコードを見ておきましょう。

Excelが起動している状態で、以下のようなVBAやVBScriptのコードを実行すると、アクティブなシートのA1セルに「hello, excel!」と入力され、Excelのウィンドウが、画面の左端から10ピクセル上端から10ピクセルの位置に移動します。

 Dim xl
 Set xl = GetObject(Class:="Excel.Application")
 xl.Range("A1").Value = "hello, excel!"
 xl.Windows(1).Left = 10
 xl.Windows(1).Top = 10

旧来のVB系言語の場合、GetObject関数の引数Classに文字列「Excel.Application」を指定すると、起動済みのExcelへの参照を取得できます。

起動後の、
  xl.Range("A1").Value = "hello, excel!"
  xl.Windows(1).Left = 10
  xl.Windows(1).Top = 10
の部分は、Excel VBAの、
  Range("A1").Value = "hello, excel!"
  Windows(1).Left = 10
  Windows(1).Top = 10
といったコードと同じです。

pywin32を使ってPythonで起動済Excelを操作するサンプル

pywin32・win32com.clientを使えば、上記のコードとよく似たコードで起動済みExcelを操作できます。

import win32com.client
xl = win32com.client.GetObject(Class="Excel.Application")
xl.Range("A1").Value = "hello, world!"
xl.Windows(1).Top = 10
xl.Windows(1).Left = 10

win32com.clientモジュールのGetObject関数で、起動済みのCOMアプリケーションへの参照を取得でき、
  xl = win32com.client.GetObject(Class="Excel.Application")
で、Excelを取得できます。

win32com.clientモジュールのGetObject関数は、先ほどのVBA・VBScriptのGetObject関数とやってることは同じです。

win32com.client.GetObjectのDocstringには、以下の記述があります。

Mimic VB's GetObject() function.

ob = GetObject(Class = "ProgID") or GetObject(Class = clsid) will
connect to an already running instance of the COM object.

ob = GetObject(r"clalah oo.xls") (aka the COM moniker syntax)
will return a ready to use Python wrapping of the required COM object.

Note: You must specifiy one or the other of these arguments. I know
this isn't pretty, but it is what VB does. Blech. If you don't
I'll throw ValueError at you. :)

VBA・VBScriptの場合、名前付き引数への値指定は「:=」を使いますが、
  Set xl = GetObject(Class:="Excel.Application")
Pythonですから「=」です。
  xl = win32com.client.GetObject(Class="Excel.Application")

参照を取得した後のコード、
  xl.Range("A1").Value = "hello, world!"
  xl.Windows(1).Top = 10
  xl.Windows(1).Left = 10
は、VBA・VBScriptの場合と、まったく同じです。

[スポンサードリンク]

Home » Python » pywin32・win32comの使い方 » pywin32を使ってPythonで起動済みExcelを操作する

TrackBack:0

TrackBack URL

Home » Python » pywin32・win32comの使い方 » pywin32を使ってPythonで起動済みExcelを操作する

Copyright © インストラクターのネタ帳 All Rights Reserved.

.