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. Windows関連

    「ファイル名を指定して実行」からMicrosoft Edgeを起動する

    以前書いた記事で、Microsoft EdgeをVBScriptから起…

  2. Office関連

    VALUE DOMAINで管理しているドメインをOffice 365で使用する。

    Office 365をセットアップすると設定される初期ドメイン「onm…

  3. Office関連

    選択したセルに連続行番号を振るWordマクロ

    Wordでマニュアルを作成するとき等、表の中で連番を振りたいときがよく…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

アーカイブ

おすすめ記事

RapidSSL_SEAL-90x50
  1. Google関連

    [Google Apps Script]拡張サービスを使用する。
  2. Acrobat

    [クライアント管理]アップデータを配布せずにAdobe ReaderやAcrob…
  3. リボン関連

    既存の機能の代わりにマクロを実行する方法をまとめてみました。
  4. Office関連

    Office 2010 開発者用リファレンスをHTML形式で”快適に…
  5. Office関連

    「クラシックスタイルメニュー」の誤検知?
PAGE TOP