Office関連

PowerShellからNetOfficeを使ってExcelを操作する方法

先日、Excel MVPの伊藤さんPowerShellからExcelファイルを上書き保存する方法について、ブログで記事を書かれていました。

この記事でも触れられていますが、.NETからExcelを扱う場合(Microsoft.Office.Interop.Excel)には、参照したCOMオブジェクトの解放(ReleaseComObject)漏れがあるとプロセスが残り続ける問題があり、上手く処理するためには面倒な後片付けが必要になります。
(この問題については、Qiitaにあるこちらの記事の解説が分かりやすかったです。)

これに対する一つの解決策として「NetOffice」があり、当ブログでも紹介(下記リンク参照)したことがあるのですが、今回はこのライブラリーをPowerShellから使ってみたいと思います。

下準備

まずはNetOfficeをダウンロードするのですが、Codeplexからダウンロードすることもできるのですが、Excel単品の場合はNuGetからダウンロードした方がお手軽です。

nuget install NetOffice.Excel

NetOfficeでExcelを操作するコード

NetOfficeの準備ができたら、いよいよPowerShellでコードを書いていきます。

[void][Reflection.Assembly]::LoadFile("C:\System\NetOffice\NetOffice.dll")
[void][Reflection.Assembly]::LoadFile("C:\System\NetOffice\OfficeApi.dll")
[void][Reflection.Assembly]::LoadFile("C:\System\NetOffice\ExcelApi.dll")
[void][Reflection.Assembly]::LoadFile("C:\System\NetOffice\VBIDEApi.dll")
$xls = New-Object NetOffice.ExcelApi.Application
$xls.Visible = $true
$wb = $xls.Workbooks.Open("C:\Test\Sample.xlsx")
$wb.Worksheets[1].Range("A1").Value = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$wb.Save()
Start-Sleep -s 10 #この間にタスクマネージャーでプロセス監視
$wb.Close()
$xls.Quit()
$xls.Dispose()

ブックを開いてセルに日付・時刻を書き込む処理ですが、実にシンプルです。
面倒な後片付けはDisposeメソッドでNetOffice側がやってくれている(たぶんそのはず)ので、自分で処理を書く必要はありません。

おわりに

この記事によるとNetOfficeでも解放漏れが発生するらしいですが、それでも楽にコードを書ける点は魅力的です。

しかもNetOfficeの場合は、Excelに限らずWordやPowerPoint、OutlookやAccessにまで対応しているので、活用できる場面は多いだろうと思います。

もちろん、事前に各Officeアプリケーションがインストールされていることが必須になってしまいますが、非常に便利なライブラリーなので興味がある方は是非触ってみてください。


WordやPowerPointを操作するコードについても記事を書きました。

関連記事

  1. Office関連

    Word 2013とWord 2010のダミー文章の比較

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  2. Office関連

    Office 2016のコントロールIDリストが公開されました。

    昨年の秋にリリースされたOffice 2016。そのコントロールI…

  3. Office関連

    テーブルの罫線色情報を列挙するPowerPointマクロ

    テーブルが多いプレゼンテーションファイルの、各テーブルの線の色の情報を…

  4. Office関連

    「変更履歴とコメントの表示」を設定するWordマクロ

    Microsoft コミュニティに「変更履歴とコメントの表示」オプショ…

  5. アイコン一覧

    Office 365アイコン(imageMso)一覧(F)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  6. アイコン一覧

    Office 365アイコン(imageMso)一覧(A)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP