6月 252016
 

経緯

お仕事で Windows を使うようになり 1 ヶ月、 報告用 Excel に記述するのも面倒になり、PowerShell である程度作ってしまおうという気になってきていて、他の人にも同じような気持ちになって欲しいので、「お?簡単そうじゃね?」と思ってもらうために書いてみました。

サンプルコードをコピペで感覚をつかめると思いますので、少しでも興味持つ人が増えてくれると嬉しいです。

環境

  • Windows 10
  • PowerShell 5.0
  • Excel 2016

PowerShell の起動

まずは、PowerShell を起動しましょう。
PowerShell ISE ではなく、PowerShell を起動してください。

Windows マーク(メニューボタン?)を右クリックしてファイル名を指定して実行、powershell と入力して OK を押すと起動します。

Excel を起動

起動した PowerShell に次のコマンドを一行づつ打ち込んでみましょう。

Excel が起動して画面に表示されたと思います。

最初の $excel = New-Object -ComObject Excel.Application で Excel が起動しており、次の $excel.Visible = $true で Excel を表示するようにしています。

タスクマネージャーで見るとわかりますが、Visible を True にしてない状態(非表示)でも Excel は起動していて、PowerShell から Excel を操作することはできますが、今回は Excel を操作することを実感するために表示しています。

3 行目の $excel.DisplayAlerts = $true は警告メッセージを表示するようにしています。2 行目と 3 行目は実際の運用では $false にしているところですので、敢えてここで紹介の意味も含めて載せています。

ワークブックを作成

Excel は起動しましたが、いつもの起動した画面とは違いますよね。

Excel でデータを作成する時の流れは、ワークブックを作り、その中のシートを選び、シートの中のセルを選んでデータを入力していきます。普段マウスポチポチでやっているのも同じ手順だと思います。

Excel を表示しながら、次の行を PowerShell に入力してみましょう。

]

準備ができたので、ようやくこれから本番です。

ちなみに、Add() の引数はテンプレートの値らしく、省略せずにワークシートを追加するときにはこうやるようです。

シートを操作してみる

まずはシートに対して色々と操作してみましょう。
Excel と PowerShell を一緒に表示しながら行うと判りやすいですし、コマンドを打った瞬間に変わるのは、やはり楽しい物があります。

シート名の取得

Excel を見るとシート名はすぐ分かります… では面白くないですよね。

シート名を PowerShell で取得してみます。

シート名の変更

シート名を「Test」に変更してみます。
Excel も見ながら変化を実感してくださいね。

セルを操作してみる

シートでもっと遊べるのですが、それだけでご飯 2 杯ぐらい余裕で食べられると思うのでこれぐらいにして、そろそろセルを触って遊んで見たいと思います。

再三書いていますが、是非 Excel も表示しながら行って下さい。

セルに値を入れる

この方法はインクリメント(順次)で処理をするときに使いやすいですね。ただ、セルを直接指定する方が効果的なときもあります。

Range メソッドを使うことで判りやすい感じで指定することができます。

セルに計算式を入れる

先ほどのセルの合計を取る計算式を入れて、値を確認してみます

直感的に判ると思います。

セルのコピー

一度作った計算式は Excel っぽくそのままコピーして使っちゃいます。

ここまででこのように表示されていると思います。

セルの装飾

合計のセルは判りやすく装飾しましょう。

ここまででこのように表示されていると思います。目に優しくない素晴らしい配色です。

Excel は用意されている色を ColorIndex として、直接数値として指定するのが一般的なようなので。(RGB でも指定できるのですが)

セルの罫線を引く

表らしく罫線を引こうと思います。

この数字も Excel 上で定義されていて、定数となっているようですね。

コメントを入れる

コメントを入れてみます。

思い通りのコメントが入れられましたね。

保存

一通り遊んだので、デスクトップに保存します。

Excel を閉じる

最後に Excel を閉じます。

タスクマネージャーを見ていると判りますが、 $excel.Quit() だけではプロセスは落ちていません。利用した変数をキッチリ破棄する必要があります。

他にも、変数を Null にして GC を動かす方法もあるようです。

考察

ここまで見たら、後はググッて色々出来そうな気がしてきたと思います。

どこまでコマンドラインでできるかは判らないですが、オブジェクトを Get-Member で見ると色々出来そうだなという気分になりました。

実際仕事では、様々なログを正規表現をゴリゴリ書いて parse して、規定のレポーティング用にフォーマットし直して保存したり、Excel からデータを取得して突き合わせたりと大活躍してもらっています。


  One Response to “PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい”

  1. […] 以前 PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい としてブログを書いたことがあります。 […]

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">