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を操作するコードについても記事を書きました。

Expression WebでVBScriptのコードを書いてみる。前のページ

PowerShellからNetOfficeを使ってWordやPowerPointを操作する方法次のページ

関連記事

  1. Office関連

    Internet Explorer用OneNoteアドオンを利用して指定したWebページをOneNo…

    「Evernote Webクリッパーで指定したWebページをEvern…

  2. Office関連

    Acrobatを利用してPDFファイルのページ数を取得するVBAマクロ

    前回の記事ではPowerShell+iTextSharp、前々回の記事…

  3. PowerShell

    [PowerShell]UI Automationで電卓を操作する方法

    「PowerShell UI Automation 操作」といったキー…

  4. Office関連

    VBE用のCOMアドインをメモ帳で作ってみる。

    “Officeアプリケーション用のCOMアドインをVisual Stu…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP