2015-06-11

PowerShellでExcelを操作する - シートの操作編 -

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

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

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


Excel操作 第2回目の今回は「PowerShellでExcelを操作する - シートの操作編 -」です。
作成されたExcelファイルのワークシートについて、新規追加や削除、コピーなどの方法を書いていきます。


<前準備>

・前回の記事をお読みいただき、C:\TESTフォルダ内に、AAA.xlsxというExcelファイルを作成していただくと、よりわかりやすいかと思います。

⇒ 前回の記事はこちら 【PowerShellでExcelを操作する - 基礎編 -


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



---------ここから-------------------------------------------------------------------------------------
# Excel操作 シートの操作編

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

# 可視化する
$excel.Visible = $true

# 既存のExcelファイルを開く
$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")

# 指定のシートのシート名を変更する
$book.WorkSheets.item(1).name = "HOGE1"

# 新しいワークシートを追加する
$book.Worksheets.Add()

# シートHOGE1をコピーする
$book.Worksheets.item("HOGE1").copy($book.Worksheets.item("Sheet1"))

# 上書き保存
$book.Save()

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

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

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。

実行後、C:\TESTフォルダ内のAAA.xlsxを開くと、画像のように、シートが3つあると思います。
2つのシート名は「HOGE1(2)」と「Sheet1」と「HOGE1」です。



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


<解説>

◆1行目~3行目
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")
この3行については割愛します。
内容がわからない場合は前回の投稿【PowerShellでExcelを操作する - 基礎編 -】をご覧ください。


◆4行目
$book.WorkSheets.item(1).name = "HOGE1"

4行目では、シート名を変更しています。
もともと、AAA.xlsxには「Sheet1」というシートしかありませんでしたので、item(1)で「1つ目のシート」を指定し、その名前を「HOGE1」にしたということです。

例えば、Sheet1、Sheet2、Sheet3とあり、Sheet2のシート名を変更したい場合は
$book.WorkSheets.item(2).name = "HOGE1"
と記述します。

また、シート番号ではなく、直接シート名で指定したい場合は、
$book.WorkSheets.item("Sheet1").name = "HOGE1"
と記述します。


◆5行目
$book.Worksheets.Add()

5行目では、新しくワークシートを追加しています。
追加されたシートは最も左側に設置されます。


◆6行目
$book.Worksheets.item("HOGE1").copy($book.Worksheets.item("Sheet1"))

6行目では、「HOGE1」シートのコピーが、「Sheet1」シートの前に作成されます。
このとき、シート名は重複を避けるため自動的に「HOGE1 (2)」となります。
作成されたシートは最も左側に設置されます。


◆7行目~10行目
$book.Save()
$excel.Quit()
$excel = $null
[GC]::Collect()

この4行についても同様に割愛させていただきます。
内容がわからない場合は前回の投稿【PowerShellでExcelを操作する - 基礎編 -】をご覧ください。

解説は以上となります。

ではここで、上記を応用したものをご紹介したいと思います。

---------ここから-------------------------------------------------------------------------------------
$excel = New-Object -ComObject Excel.Application

$excel.Visible = $true

$book = $excel.Workbooks.Add()

For ( $A = 1; $A -le 9; $A++ )
{
$book.Worksheets.item($A).copy($book.Worksheets.item($A))
}

For ( $B = 1; $B -le 10; $B++ )
{
$book.WorkSheets.item($B).name = "シート$B"
}

$book.SaveAs("C:\TEST\BBB.xlsx")

$excel.Quit()

$excel = $null
[GC]::Collect()

---------ここまで-------------------------------------------------------------------------------------

少々イジワルして、コメントは書いておりません。
実行結果についてもあえて載せないようにします。

実行する前に、「こういう結果になるだろう」と予測してみてください。


次回は「PowerShellでExcelを操作する - セルの操作編 -」を投稿致します。

おおまかな内容は次の通りです。
  ・セルに文字列の入力
  ・セルに数式を入力
  ・セルから文字列を取得
  ・セルから数式を取得

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


0 件のコメント:

コメントを投稿

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