こんにちは。
先日、備忘録した「ExcelでVBA、Seleniumを使ってみた-(⑨出品一覧の取得)」では、出品している商品の写真をExcelシートに取り込んでいます。
そこでちょっとしたノウハウを活用していますので、その内容を備忘録しておきます。
■ 動作環境
OS: Windows 8.1
Excel: 2013
Chrome: 88.0.4324.104(2021.01.28知らないうちに更新されてました!💦)
■ 取り込んだイメージ
出品物によっては、複数の写真を掲載しているのですが、ここでは参考程度に貼るだけですので、「出品中」一覧に表示されている写真イメージを取得する仕組みにしています。
■ 写真の取り込み方法
ちょっと考えないといけないポイントは、次の2点です。
写真を取り込むクラス/メソッドの選択
図サイズの調整
■ 写真を取り込むクラス/メソッドの選択
選択肢は以下の2点です。
① Pictures.Insert メソッド
Excelシートへ画像を挿入する従来からの方法は、PicturesコレクションのInsertメソッドです。
「ボタン1」に仕込んだソースは、次のとおりです。
うーん、Insertメソッドを実行しただけで位置は操作していないのですが、「アクティブセルの左上隅」に合わせるような形で配置されました。
ActiveSheetではなく、特定シートを指定して実行すると、該当シートのA1セルに挿入される
意図的に位置を操作したい場合は、取り込んだPictureオブジェクトのTopプロパティ、Leftプロパティで操作可能
また、取り込まれた図はリンクオブジェクトとして挿入されます。
よって、リンク元となる元の図が移動、または削除された場合は、次のとおり残念な感じになってしまいます💦
② Shapes.AddPicture メソッド
図を図その物として挿入するには、ShapesコレクションのAddPictureメソッドを使用します。AddPictureメソッドは、引数がたくさんあります&何れもマストです💦
FileName: 図を作成するファイルを指定します。
LinkToFile: リンクオブジェクトとして挿入する場合はTrue、コピーはFalseを指定します。
SaveWithDocument: 保存時図も一緒に保存する場合はTrue、それ以外はFalseを指定します。(もしLinkToFileがFalseの場合は、この引数をTrue に設定する必要あり)
Left: 図の左上隅の位置をポイント単位で指定します。
Top: 図の左上隅の位置をポイント単位で指定します。
Width: 図の幅をポイント単位で指定します。 (既存ファイルの幅を保持する場合は、-1を指定)
Height: 図の高さをポイント単位で指定します。 (既存ファイルの高さを保持する場合は、-1を指定)
参考までに、前述の「出品一覧」での、写真取り込み時のソースを紹介しておきます。
のちほど図のサイズは制御しますので、最小限の「Width:=0、Height:=0」で取り込んでいます。
※これ以降も同様ですが、「m_」で始まる英語大文字の変数名みたいな名称は、何れも私が別途定義している定数です。
※見慣れない関数について補足しておきます。(何れも自前関数です)
repDummy: 指定文字列(XPath)の特定箇所を、渡された番号に置き換え
downloadImage: 指定されたURLからイメージファイルをダウンロード
getItemID: 某フリマアプリ上の商品IDを取得
■ 図サイズの調整
大枠は前述のソースのとおりですが、Withで受け取っているPictureオブジェクトに対して、最後にHeightプロパティを制御しています。
縦横比率を管理しているLockAspectRatioプロパティにはTrueが設定されている前提なのを補足しておきます!
■ まとめ
いかがでしたでしょうか?
フリマアプリをコントロールするとなると画像操作も当たり前に発生しますので、このようなノウハウは押さえておきたいポイントですよね!^^
次回以降も、苦労した点を備忘録しようと思います。
Comments