「win32com activeseet.pictures.insert 画像」
という検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスがありました。
ここ数年、日本でも人気となっているPythonから、WindowsのCOMを操作するライブラリpywin32を使って、ExcelのPictures.Insertメソッドを利用するには、どのようなコードを書けばいいのかを探していた方による検索でしょう。
Excelのアクティブシートに画像を挿入するサンプル
Cドライブのtempフォルダーにsample.jpgを用意しておいて、Excelが起動している状態で以下のスクリプトを実行すると、アクティブなシートにC:\temp\sample.jpgファイルが挿入されます。
xl_app = win32com.client.GetObject(Class='Excel.Application')
active_sheet = xl_app.ActiveSheetpictures = 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
- Newer:Word VBAでセルを分割する
- Older:ParagraphFormat型変数で設定する様子もローカルウィンドウで
Home » Python » pywin32・win32comの使い方 » pywin32・win32comでExcelのPictures.Insertを