エクセルに2900枚の画像を自動で貼り付け。perl のサンプルスクリプト
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システム」等で
結構自動化(効率化)ができるもんです!
プログラム(スクリプト)の効果
手作業よりも、プログラムでやった方が良いのは、誰でも?分かっていると思います。
でもなぜか「業務のプログラム化」って進みません。
「そんなことが出来るなら、今頃苦労してないよ!」って事なのでしょう。。
でも、サンプルが有れば、そんなに苦労しないはずです。
しかし、ネットには「実務用のサンプル」って、余りアップされていないですよね!
今後も、私が「実務」で使っていたスクリプトを公開していきます。