Home » Python » pywin32・win32comの使い方 » pywin32・win32comでExcelのPictures.Insertを

pywin32・win32comでExcelのPictures.Insertを

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

「win32com activeseet.pictures.insert 画像」
という検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。

ここ数年、日本でも人気となっているPythonから、WindowsのCOMを操作するライブラリpywin32を使って、ExcelのPictures.Insertメソッドを利用するには、どのようなコードを書けばいいのかを探していた方による検索でしょう。

[スポンサードリンク]

Excelのアクティブシートに画像を挿入するサンプル

Cドライブのtempフォルダーにsample.jpgを用意しておいて、Excelが起動している状態で以下のスクリプトを実行すると、アクティブなシートにC:\temp\sample.jpgファイルが挿入されます。

import win32com.client

xl_app = win32com.client.GetObject(Class='Excel.Application')

active_sheet = xl_app.ActiveSheet
pictures = active_sheet.Pictures()
pictures.Insert(r'C:\temp\sample.jpg')

Pythonではメソッドのカッコが必須

「win32com activeseet.pictures.insert 画像」
と検索した方は、以下のようなスクリプトを実行したものの、「AttributeError: 'function' object has no attribute 'Insert'」エラーが発生したのではないかと、私は想像しています。

import win32com.client
xl_app = win32com.client.GetObject(Class='Excel.Application')
active_sheet = xl_app.ActiveSheet
active_sheet.Pictures.Insert(r'C:\temp\sample.jpg')

Excel VBAならば、

ActiveSheet.Pictures.Insert("C:\temp\sample.jpg")

で、画像が挿入されますから。

VBAでは、関数やメソッドで引数を指定する必要がない場合、関数名・メソッド名の直後にカッコをつけないのが一般的な書き方です。

これに対しPythonでは、引数を指定しない場合であっても、関数名・メソッド名の直後にカッコをつけなければなりません。

ですから、先ほどのスクリプトの、

pictures = active_sheet.Pictures()
pictures.Insert(r'C:\temp\sample.jpg')

の部分を1行で書くのであれば、

active_sheet.Pictures().Insert(r'C:\temp\sample.jpg')

のように、Worksheet.Picturesメソッドの直後にカッコをつける必要があります。

Excel VBAでもPictures().Insert()で動く

ちなみにExcel VBAの場合も、Worksheet.Picturesメソッドでカッコを明記した、

ActiveSheet.Pictures().Insert("C:\temp\sample.jpg")

は、正常に動きます。

最終更新日時:2021-03-29 16:12

[スポンサードリンク]

Home » Python » pywin32・win32comの使い方 » pywin32・win32comでExcelのPictures.Insertを

「pywin32・win32comの使い方」の記事一覧

検索


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

.