2015-06-12

PowerShellでExcelを操作する - ブック間のコピー編 -

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

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

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


Excel操作 6回目の今回は「PowerShellでExcelを操作する - ブック間のコピー編 -」です。

過去の記事で、同一ブック上でのコピー&貼り付けはご紹介いたしましたが、今回は異なるブック間(ブックAと別のブックB 等)でコピー&貼り付けを行います。



<前準備>

・C:\TESTフォルダ内に、AAA.xlsxBBB.xlsxのExcelファイルを作成しておき、AAA.xlsxには事前にB2:C5に、画像のような文字列を入力しておいてください。
BBB.xlsxは空のままでOKです。



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


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



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

# Excel操作 ブック間のコピー編


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

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

# コピー元のExcel
$SourceBook = $excel.Workbooks.open("C:\TEST\AAA.xlsx")

# コピー先のExcel
$TargetBook = $excel.Workbooks.open("C:\TEST\BBB.xlsx")

# コピー範囲の指定
$SourceRange = $SourceBook.WorkSheets.item(1).range("B2:C5")

# コピー
$SourceRange.copy()

# コピー先シートの指定
$Targetsheet = $TargetBook.worksheets.item(1)

# 貼り付け開始位置の指定
$Range = $Targetsheet.Range("C1")

# 貼り付け
$Targetsheet.paste($Range)

# 上書き保存
$SourceBook.Save()
$TargetBook.Save()

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

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

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

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

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


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


<解説>

◆1行目~2行目
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

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


◆3行目・4行目
$SourceBook = $excel.Workbooks.open("C:\TEST\AAA.xlsx")
$TargetBook = $excel.Workbooks.open("C:\TEST\BBB.xlsx")

3行目ではコピー元のExcelファイルを指定し、変数SourceBookに格納しています。
4行目ではコピー先のExcelファイルを指定し、変数TargetBookに格納しています。


◆5行目
$SourceRange = $SourceBook.WorkSheets.item(1).range("B2:C5")

5行目では、コピー元ワークシートの中の、どの部分を選択するのか、を指定しています。
今回の例文では「算数」~「20」の部分となります。


◆6行目
$SourceRange.copy()

6行目では、5行目で選択した範囲のコピーを実行しています。
この時点ではまだ貼り付けられていません。


◆7行目
$Targetsheet = $TargetBook.worksheets.item(1)

7行目では、コピー先のシートをシート番号で選択しています。
シート名で直接指定することも可能です。


◆8行目
$Range = $Targetsheet.Range("C1")

8行目では、コピー先シートのどのセルに貼り付けるのかを指定しています。


◆9行目
$Targetsheet.paste($Range)

9行目で貼り付けを実行しています。


◆10行目~14行目
$SourceBook.Save()
$TargetBook.Save()
$excel.Quit()
$excel = $null
[GC]::Collect()

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


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

私は、このスクリプトを組むのに、かなり苦労しました。
というのも、日本語のサイトが見つからず、英語のサイトを翻訳しながらなんとか完成までこぎつけたからです。(検索の仕方が悪かっただけかもしれませんが・・・)

しかし、苦労した分、このスクリプトにはお世話になっており、自動化の幅も広げることができました。

本記事をご覧の皆様がどのようなExcelファイルを使用されているのかはわかりませんが、納品書や伝票のような定型のExcelファイルから情報を抜き取りたい場合などに有効活用できるのではないでしょうか。


次回は「PowerShellでExcelを操作する - フォントの操作編 -」を投稿致します。

おおまかな内容としましては、フォントのサイズや書式、色の指定方法等となります。

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


0 件のコメント:

コメントを投稿

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