2015-06-11

PowerShellでExcelを操作する - 基礎編 -


PowerShellでは、Excelファイル(エクセル 拡張子xls、xlsx、xlsm等)を操作することもできます。

Excelは、Officeソフトの中でも特に使用頻度が高く、業務で毎日使用しているという人も少なくないことと思います。

そんな毎日使用するものだからこそ、定型業務を自動化していきましょう!!


Excel操作 第1回目の今回は、「PowerShellでExcelを操作する - 基礎編 -」と題し、PowerShellからExcelファイルを開く~セルに文字列を入力する~保存する~Excelを閉じる というような内容で書いていきます。


<前準備>

・Cドライブの直下に「TEST」という名前のフォルダを新規作成しておく



それでは早速、例文を記述していきます。



---------ここから-------------------------------------------------------------------------------------
# Excel操作 基礎編

# Excelを操作する為の宣言
$excel = New-Object -ComObject Excel.Application

# 可視化しない
$excel.Visible = $False

# ワークブックを作成
$book = $excel.Workbooks.Add()

# ワークシートを番号で指定し、接続する
$sheet = $excel.Worksheets.Item(1)

# 指定したセルに文字列を入力
$sheet.Cells.Item(2,3) = "PowerShellで作成"

# 名前をつけて保存
$book.SaveAs("C:\TEST\AAA.xlsx")

# Excelを閉じる
$excel.Quit()

# プロセスを解放する
$excel = $null
[GC]::Collect()
---------ここまで-------------------------------------------------------------------------------------

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。
前準備で作成した「TEST」フォルダの中に、「AAA.xlsx」が作成されているはずです。

「AAA.xlsx」を開き、内容を確認してください。
画像のように、Sheet1のC2セルに「PowerShellで作成」と入力されていますか?


それでは1行ずつ解説していきます。
(コマンドが記述してある部分だけを数えて1行目、2行目…としています)

<解説>

◆1行目
$excel = New-Object -ComObject Excel.Application

PowerShellでExcelファイルを操作するには、COMオブジェクトを利用します。
まず始めに「Excelを使用しますよ」という宣言を行っています。

COMオブジェクトについては、興味のあるかたはググってみてください。
とりあえず、今の段階では「この一文をまず入れる」ということだけ覚えておいてください。


◆2行目
$excel.Visible = $False

2行目では、Excelを可視化するかどうかを指定しています。
可視化をするなら「$True」、可視化しないなら「$False」を指定します。

なお、"可視化しない"="最小化"ではないことを覚えておいてください。
(可視化しないと、画面上は何も変化がないように見えます)



◆3行目
$book = $excel.Workbooks.Add()

3行目ではAddメソッドを使い、新しくブックを作成しています。

ここで、既に作成されているExcelファイルを開きたい場合は、次のように記述します。

$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")


◆4行目
$sheet = $excel.Worksheets.Item(1)

4行目では、シートを番号で指定し、接続しています。
(番号は1から始まります)

番号ではなく、シート名で指定する場合は次のように記述します。

$sheet = $excel.Worksheets.Item("Sheet1")


◆5行目
$sheet.Cells.Item(2,3) = "PowerShellで作成"

5行目では、4行目で接続したシートのC2セルに文字列を入力しています。

セルの指定方法についてですが、数字のみを用いて( 行 、列  )の順に記述します。
例えばセルA5は(5,1)、セルZ10は(10,26)となります。


◆6行目
$book.SaveAs("C:\TEST\AAA.xlsx")

例文では新規ブックを作成したので、6行目で「名前を付けて保存」を行っています。

これが既存のExcelを開いているのであれば、「上書き保存」にする必要があります。
上書き保存の場合は、次のように記述します。

$book.Save()


◆7行目
$excel.Quit()

7行目でExcelを終了しています。
2行目で可視化をTrueにしていた場合は、画面からExcelが消えるのがわかると思います。


◆8行目・9行目
$excel = $null
[GC]::Collect()

最後に、プロセスの開放を行っています。
実は、7行目でExcelを終了させても、プロセスは残ったままの状態となっています。
(タスクマネージャーを起動し、プロセスのタブを見ると「EXCEL.EXE」が残っている)

プロセスが残り、蓄積されてしまうと、PCの動作が重くなるなどの問題がありますので、最後にこの2行を必ず記述するようにしましょう。


長くなりましたが、「Excelの操作 - 基礎編 -」は以上です。

PowerShellでExcelを操作できるようになると、自動化の幅が広がりますので、使いこなしていきたいですね!

次回は「PowerShellでExcelを操作する - シートの操作編 -」を投稿します。

おおまかな内容は次の通りです。
  ・シートの追加
  ・シートの削除
  ・シートのコピー
  ・シート名の変更
  ・全てのシート名の取得

=======================================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


2 件のコメント:

  1. つい最近、パワーシェルを知ったばかりなので、とても勉強になります。
    エクセル操作に特に興味がありまして、例えばグラフの縦軸を片対数にする方法を知りたいと思っています。
    今後のために調べ方を身につけたいのですが、どのように調べておられるのでしょうか?

    返信削除
    返信
    1. 匿名になっておりますが管理人です。
      コメントいただきありがとうございます。
      また、返信が遅くなり申し訳ありません。

      お問い合わせいただいた件ですが、私個人の調べ方としましては「VBAでの書き方を調べる」ところから始めます。
      PowerShellでExcelを操作する方法は、VBAのそれととてもよく似ています。
      細かい部分の記述方法は違うこともありますが、思っている以上にそのまま使えることもあります。

      コメントいただいた「グラフの縦軸を片対数にする方法」についてまだ調べておりませんので、PowerShellでの具体例を教示できないのが大変心苦しいのですが、VBAでの記述方法を参考になさってみてはいかがかと思います。

      当ブログをご愛顧いただき、誠にありがとうございます!
      (^^)/

      削除

疑問・質問・リクエスト お気軽にどうぞ (^O^)/