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 アドイン

    Excel向けPower BI カスタム ビジュアル機能の紹介

    Power BI ブログの記事「Excel announces new…

  2. Office関連

    Web上でVBAのコードを解析するツール「Microsoft Sharepoint and VBA …

    Web上でVBAやSharePointアプリケーションのコードを解析し…

  3. Office関連

    [Office 365 Solo]テクニカル サポートってどんなもの?

    前々回の記事に引き続いて、Office 365 Soloの疑問点第三弾…

  4. Office関連

    [Excel Services ECMAScript]アクティブなシート名を取得する。

    埋め込んだExcelワークブックのアクティブなシート名を取得するコード…

  5. Office関連

    [VBA]ユーザーフォームでBootstrapを使う。

    MSDNフォーラムにあった質問「VBAでのフォーム オブジェクトを立体…

  6. Office関連

    「Office 2003 のコマンドに対応する Office 2010 のリファレンス ブック」のダ…

    クリックさんのブログ記事「旧メニュー対応表を使いたい: パソコンのツボ…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

最近の記事

アーカイブ

PAGE TOP