Home » Python » pywin32・win32comの使い方 » pywin32・win32comでExcelに画像を挿入する

pywin32・win32comでExcelに画像を挿入する

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

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

pywin32・win32comを使って、画像を挿入するには、どのようなコードを書けばいいのかを探していた方による検索です。

[スポンサードリンク]

どのWindowsアプリケーションでの話か不明ですが、起動済みExcelのアクティブシートに画像を挿入するサンプルスクリプトをご紹介します。

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

Cドライブのtempフォルダーにsample.jpgが存在している状態で、画像を挿入したいワークシートがアクティブな状態で、以下のスクリプトを実行してみてください。

import win32com.client

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

active_sheet.Shapes.AddPicture(
    Filename=r'C:\temp\sample.jpg',
    LinkToFile=False,
    SaveWithDocument=True,
    Left=0,
    Top=0,
    Width=-1,
    Height=-1
)

サンプルスクリプトで行っている処理

最初の2行
  import win32com.client
  xl_app = win32com.client.GetObject(Class='Excel.Application')
は、win32com.clientを使って起動済みExcelを操作するための、Python特有のコードです。

最初に、Excel.Applicationオブジェクトの、ActiveSheetプロパティでアクティブなシートへの参照取得して、変数active_sheetへ代入しておきます。
  active_sheet = xl_app.ActiveWorkbook.ActiveSheet

残りはご紹介済みのExcel VBAと似たコードです。

7つの引数を指定して、
  active_sheet.Shapes.AddPicture(
      Filename=r'C:\temp\sample.jpg',
      LinkToFile=False,
      SaveWithDocument=True,
      Left=0,
      Top=0,
      Width=-1,
      Height=-1
  )
ShapesコレクションのAddPictureメソッドを実行しています。

VBAの場合、戻り値を使うか否かで引数を括るか括らないかを変更する必要がありますが、Pythonの場合は上記のとおり引数を括る必要があります。

引数名と引数の間はVBAの場合「:=」ですが、Pythonの場合は「=」です。

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

アクティブシートに画像を挿入した後に、画像のサイズを変更する場合は以下のようなスクリプトです。

import win32com.client

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

shp = active_sheet.Shapes.AddPicture(
    Filename=r'C:\temp\sample.jpg',
    LinkToFile=False,
    SaveWithDocument=True,
    Left=0,
    Top=0,
    Width=-1,
    Height=-1
)

shp.LockAspectRatio = True
shp.Width = 300

先ほどの、画像挿入のみを行うスクリプトとほとんど同じですが、Shapes.AddPictureメソッドの戻り値を変数shpに代入しておいて、
  shp = active_sheet.Shapes.AddPicture(

Shape.LockAspectRatioプロパティにTrueを設定して、
  shp.LockAspectRatio = True

画像の幅を設定しているコードを追加しています。
  shp.Width = 300

[スポンサードリンク]

Home » Python » pywin32・win32comの使い方 » pywin32・win32comでExcelに画像を挿入する

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

検索


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

.