「xlwings 写真 削除」
といった検索でアクセスがありました。
この記事では、Excelを操作するPythonの外部パッケージ「xlwings」を使って、ワークシート上の全画像を削除するスクリプトをご紹介します。
xlwingsで画像を削除するサンプル
画像の存在するワークシートがアクティブな状態で、以下のスクリプトを実行してください。
sht = xw.sheets.active
for pic in sht.pictures:
pic.delete()
アクティブシート上の画像が削除されます。
xlwingsで画像を削除する処理
Sheetオブジェクトに用意されているpicturesプロパティを使うと、ワークシート上に存在する全画像を表すPicturesコレクションを取得できます。
Picturesコレクションの要素であるPictureオブジェクトを、for文で順番に取得して、Picture.delete()メソッドで削除しています。
拙著『理解するExcel VBA/図形操作の基本』の、[7-5. Rectangle・Oval・DrawingObjects とは]で、RectangleやOvalといったExcel VBAのレガシーオブジェクトについて解説しています。
レガシーオブジェクトはたくさんの種類が存在しており、画像を表すPicturesコレクションや
Pictureオブジェクトも
隠しオブジェクトとして存在しています。
xlwingsのPicturesコレクションやPictureオブジェクトは、そのようなExcel VBAのPicturesコレクション・Pictureオブジェクトのラッパーオブジェクトです。
ただし、Excel VBAのPicturesコレクションには削除を行うDeleteメソッドも用意されていますけれど、
xlwingsのPicturesにdelete()メソッドが実装されていないため、先述のスクリプトではfor文でPictureオブジェクトを順番に取得して、単独の画像を表すPictureオブジェクトdelete()メソッドで削除しています。
Pictures.apiプロパティを使う場合
Picturesコレクションのapiプロパティを経由して、Excel VBAのPicturesコレクションを取得すれば、先ほどの
for pic in sht.pictures:
pic.delete()
の部分は、以下のようにfor文を使わずに書くことも可能です。
sht.pictures.api.Delete()
Home » Python » xlwingsの使い方 » xlwingsで全画像を削除する-Picture.delete()メソッド