Just another Windows perl site

エクセルに2900枚の画像を自動で貼り付け。perl のサンプルスクリプト

2024/05/07
 
この記事を書いている人 - WRITER -
*会社職務経歴  ・本店・安全・品質部長(2年)  ・ラインマン(送電線建設・保守)(30年)  ・情報システム(3年)

Contents

エクセルのワークシートに2900枚の画像を自動で貼り付け、perl のサンプルスクリプト

Excelに図(写真)を張り付けて、報告書等を作っていませんか?
エクセル貼り付け手順はメニュータグから、
「挿入」→「図」→「ファイルから」→「ファイル選択」の手順で
必要な画像を選んで、貼り付けます。
しかし、ほとんどの場合、選択された写真は、自動調整されません。
思い通りにぴったり張り付けるのには、結構時間が掛かってしまいます。
それなのに、報告書等の写真の数って結構多いですよね?
まだ、個人の記念写真等なら、何枚貼り付けても楽しいですね。
でも、仕事で枚数の多い報告書用写真等だと、逆に、ストレスが掛かります。
それに、上司や関係者から「報告書はまだか!」等と矢のような催促がきます。
「写真貼りが大変なんです!」等と言ってみても
「写真なんか貼るだけじゃないか」等と思われているのです。
でも、実際に貼ったことがある人なら、手間が掛かるのは、分かりますよね!
下手をすると、写真貼りだけに半日掛かったりします。
そこでどうするかと言えば、自動化しかありません。
幸い、仕事の写真報告書は比較的フォーマットが統一されています。
貼りたい範囲の大きさに合わせて、画像の大きさをセルとピッタリになるように貼り付けられます。
自動化は勿論、マクロ(VBA)でもいいのですが、perl でやってみました。
perl のスクリプトなら、結構使いまわしが楽です。
今回は、写真が無いので、エクセルシートの色コードデータから色画像を作りました。
次に作った色画像をエクセルシートに張り付けました
2900個の色のコードでしたが、1分30秒ほどで出来上がりました。
このように、自動化は適切に行えば、抜群の効率化になります。
出来るようになるのは「慣れが必要」です。
必要になる前に備えるのが、準備ということです。
さあ!試してみましょう!

スクリプトの説明

実行前に原図と実行後の作成したエクセルシート画像

こんな風に、なります。
<実行前の原図エクセルシート画像>


<実行後の作成したエクセルシート画像>

スクリプト作成の流れと条件

**Windows で、エクセルがインストールされていないと、動きません。**
**Windows で動く「ActivPerl」 がインストールされていないと、動きません。**
perlの場合、プログラムと言わず、スクリプト(script)といいます。
スクリプトは「シフトジス(shift-jis)」で書いて有ります。
*理由:Windows およびエクセルのデータは、「シフトジス(shift-jis)」で書かれているからです。
Windows で動く perl の内、activeperl(アクティブパール)を使います。

1) まず、エクセルの原図を用意しておきます
2)一行の高さを21ポイント (28ピクセル)にしておきます。
*行の高さは 0 (ゼロ) から 409 の間で指定できます。(マイクロソフト転記)
*既定の行の高さは 12.75 ポイント (約 1/6 インチまたは約 0.4 cm) です。(マイクロソフト転記)
“単位はポイント(pt)。1 pt = 1/72 in, 1 in = 25.4 mm”
3) エクセルの「B列」に色のコード(十六進数)を「2900行」書いておきます。
4) 画像貼付け列は「C列」とします
念のため、「D列に」画像名を書きだしておきます。
5) エクセルの「E・F列」に色の名前を「2900行」書いておきます。
6) 色画像は「ImageMagick」で作成し、カレントフォルダに描き出します。
7) 描き出した画像は、エクセルに張り付け後、削除します
8) 画像を貼付けしたエクセルは、原図名に「作成」を付加し、別名で保存します
* 実行については、独立したフォルダーで実行してください。*
* もし、大事なデータを消しても、責任はとれません。*

スクリプトの概要

1) モジュールの読込
2) 初期設定(画像位置や画像大きさ等)
3) エクセルの起動
4) エクセルの「B列」から色のコード(十六進数)を読み込む。
5) 読み込んだデータを元に、画像を作成する
6) 画像をエクセルに張り付ける。
7) 念のため、画像ファイル名を書き出しておく。
8) エクセルを、別名で保存する。
9) エクセルを、終了する。
*詳細は、スクリプトの中に、だいたい分かるように書いたつもりです。。

スクリプトの実施効果

このような単純作業を避けるには、自動化しかありません。
自動化は、マクロ(VBA)でもいいのですが、perl でやってみました。
「いまさら perl かよ!」と思うでしょうが、 「ActivePerl 」は、エクセルワードパワーポイント」等
マイクロソフトのWindows と非常に相性がいいのです。
実施結果は、色コード2900個の作成・貼り付け処理が、1分30秒ほどで出来上がりました。
手動でやったとして、一個15秒かかるとして、2900個で、約12時間かかります。
何と、「43,500秒」が「90秒」で出来てしまうのです。!
それも、「色画像」を作りながらの実行結果です。

「エクセル原図」、「スクリプト」、「加工後のエクセル」のダウンロード

・ZIPで保存してあります。解凍してください。
ZIPの中身:エクセルファイルの原図、perl のスクリプト、加工後のエクセルファイル(参考)
_perl_graph_color_name_3000_5.zip

activeperl のインストール

Windows で動く perl の内、activeperl(アクティブパール)を使います。
「いまさら perl かよ!」と思われますが、 「ActivePerl 」は、「エクセル、ワード、パワーポイント」等
マイクロソフトのOS(Windows) 、ソフトと非常に相性がいいのです。

activeperl および「ImageMagickモジュール」のインストール。

標準で入っているモジュール、win32::ole でエクセルを動かします。
標準で入っているモジュール、win32::API で、GUIのメッセージを出力します。
標準で入っていないモジュール、「ImageMagick」 で、色画像を作ります。
activeperl インストール記事は、以下からどうぞ。

ActivePerl 5.24.1 2402(32bit) インストール記

スクリプトのポイント(スクリプトが簡単に応用できるようにしておく)

スクリプトのポイントは、事前に貼り付け位置を、変数化しておくことです。
こうすることによって、位置を変更する時に、簡単に変更できます。
簡単に変更できることで、他の画像を張り付けるときに、応用できます。

まとめ

「エクセルマクロ」と「ActivePerl」 について

基本的に「エクセルマクロ」も「Win32ole-excelモジュール」も同じような物です。
私もエクセルのマクロを書いたこともありました。
しかし、エクセルのマクロエディタが、常時使っているエディタより使い難いので、嫌になりました。
又、エクセルファイルごとに、いちいちマクロを複写するのも、手間でした。
「こんな事なら、perl でやってしまおう」と思ったのが、きっかけでした。
エクセルでは「ピボットの自動作成」「グラフの自動作成」等、色々やってます。
「Win32関連モジュール」は「ワード」「パワーポイント」「IE」「Windoesシステム」等で
結構自動化(効率化)ができるもんです!

プログラム(スクリプト)の効果

手作業よりも、プログラムでやった方が良いのは、誰でも?分かっていると思います。
でもなぜか「業務のプログラム化」って進みません。
「そんなことが出来るなら、今頃苦労してないよ!」って事なのでしょう。。
でも、サンプルが有れば、そんなに苦労しないはずです。
しかし、ネットには「実務用のサンプル」って、余りアップされていないですよね!

今後も、私が「実務」で使っていたスクリプトを公開していきます。

この記事を書いている人 - WRITER -
*会社職務経歴  ・本店・安全・品質部長(2年)  ・ラインマン(送電線建設・保守)(30年)  ・情報システム(3年)

- Comments -

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Copyright© 仕事の進め方の効率化ブログ , 2017 All Rights Reserved.