2015-06-12

PowerShellでExcelを操作する - 行・列の操作編 -

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

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

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


Excel操作 5回目の今回は「PowerShellでExcelを操作する - 行・列の操作編 -」です。

今回の主な内容は 行の挿入、列の挿入、使用行数の取得、使用列数の取得 です。



<前準備>

・Excel操作の過去記事をお読みいただき、C:\TESTフォルダ内に、AAA.xlsxというExcelファイルを作成していただくと、よりわかりやすいかと思います。
また、今回は事前にB2:C5に、画像のような文字列を入力しておいてください。



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


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



---------ここから-------------------------------------------------------------------------------------

# Excel操作 行・列の操作編


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

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

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

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

# シートの5行目に1行挿入する
$sheet.Rows.item(5).Insert()

# シートの3列目に1列挿入する
$sheet.Columns.item(3).Insert()

# 使用している行数を取得する
$ROW = $sheet.UsedRange.Rows.Count

# 使用している列数を取得する
$COL = $sheet.UsedRange.Columns.Count

# メッセージボックスで変数2つの内容を表示
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("行数は $ROW です。`n列数は $COL です。", "結果")

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

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

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

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

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

実行直後、メッセージボックスが表示されます。


処理完了後、C:\TESTフォルダ内のAAA.xlsxを開くと、画像のように入力されると思います。


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


<解説>

◆1行目~4行目
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")
$sheet = $excel.Worksheets.Item(1)

この4行については割愛します。
内容がわからない場合は【PowerShellでExcelを操作する - 基礎編 -】をご覧ください。


◆5行目
$sheet.Rows.item(5).Insert()

5行目では、ワークシート内の5行目に1行挿入しています、
もともと「社会」が5行目にありましたが、1行挿入されたため、6行目にずれています。
※行ごと削除したい場合は、$sheet.Rows.item(5).Delete()と記述します。


◆6行目
$sheet.Columns.item(3).Insert()

6行目では、ワークシートの3列目に1列挿入しています。
もともと数字の入ったセルが3列目となっていましたが、1列挿入されたため、4列目にずれています。
※列ごと削除したい場合は、$sheet.Columns.item(3).Delete()と記述します。


◆7行目・8行目
$ROW = $sheet.UsedRange.Rows.Count
$COL = $sheet.UsedRange.Columns.Count

7行目・8行目では、それぞれ使用されている行・列をカウントし、変数に格納しています。

このカウントを実行する時点で、Excelファイル内では既に行と列が挿入された状態です。
実際に文字列が入っているのは4行×2列ですが、実行結果から判断するに、間にある空白行・空白列もカウントの対象となるようです。


◆9行目・10行目
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("行数は $ROW です。`n列数は $COL です。", "結果")

9行目・10行目では、7行目・8行目で取得し、変数に格納した文字列をメッセージボックスで表示させています。

※メッセージボックスの使用については【PowerShellでMessageBoxを使用する】をご覧ください。 


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

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


例文の解説は以上となります。

今回の内容は使用頻度は低いと思いますが、こんなこともできるという意味も含めて、ご紹介させていただきました。


次回は「PowerShellでExcelを操作する - ブック間のコピー編 -」を投稿致します。

おおまかな内容としましては、ブックAの指定範囲から、他のブックBの指定箇所に貼り付ける方法となります。

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


0 件のコメント:

コメントを投稿

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