PowerShellからExcelをあれこれ » 履歴 » バージョン 3
« 前 -
バージョン 3/4
(差分) -
次 » -
最新版
健二 酒井, 2019/09/25 19:47
PowerShellからExcelをあれこれ¶
概要¶
動かしたいなぁということで調べたことをまとめる。
COMオブジェクト¶
Coponent Object Modelの略、Microsoftの技術。
ソフトウェアを動かすためのインターフェースらしい。
参考 Wikipedia https://ja.wikipedia.org/wiki/Component_Object_Model
各アプリケーション(とその内部コンポーネント)を表現するオブジェクト群を使って、外部のプログラムからソフトウェアの機能を使えるようにしたしろもの。
例えばExcelのCOMオブジェクトを呼ぶと丸ごとExcelのプロセスが起動する。
たぶんVBScriptとか、VBAとかも内部的にはこれを使っているんじゃないかなぁ。
COMオブジェクトを抑えればVBAの勉強にもなる。その逆もしかり。
膨大なプロパティ・メソッドが存在するのでVBAやマクロから学んだほうがいい気がする。
参考 Excelオブジェクトモデル https://docs.microsoft.com/ja-jp/visualstudio/vsto/excel-object-model-overview?view=vs-2019
アンマネージド¶
.NETで動かすソフトウェアは基本、.NETの実行環境(CLR、共通言語ランタイム)が色々管理してくれる。
ただし、.NET上で動いていないものを動かすとき、.NETはそのコードを管理できないためそこは管理外ということでunmanaged。
アンマネージドなコードを実行するときは、リソースの開放とかを手動でやらなければならなくなったりする。
例えば今回のExcelオブジェクトは開放し忘れるとExcelのプロセスが残り続けたりする。
生成は色々なときやるけど、COMオブジェクトの開放は以下のメソッドを使う。
' xlObjectの解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlObject)
PowerShellでやるときは以下のようになるのかな。
$ [System.Runtime.InteropServices.Marshal]::ReleaseComObject(xlObject)
リソースがリークしないように開放するのは、生成したのと逆順に開放していくのがコツらしい。
Excelの場合は、Application -> Workbook -> Worksheet -> Rangeっていうような階層構造になっているのでこの順番で開放していくことになるっぽい。
参考 COMオブジェクトを解放する http://exceldotnet.lance40.com/comrelease.html
Excelの勉強¶
とりあえずこれ見ておこう。
Excelオブジェクトモデル https://docs.microsoft.com/ja-jp/visualstudio/vsto/excel-object-model-overview?view=vs-2019
古い情報だけど、絵になってて見やすい。互換性のためにも基本は変わっていない(はず)
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa141044(v=office.10)?redirectedfrom=MSDN
VBA <-> COMオブジェクトと並行して考えられる・学べるのでVBAやVBScriptの解説サイト、コードを読むのも勉強になる。
そういや社会人最初の仕事はACCESS VBAだったなぁ。Accessのオブジェクトモデルも見たなぁ、懐かしい。
スニペット¶
Excelオブジェクトの作成とメンバー一覧取得
$excel = New-Object -ComObject Excel.Applicatio
$excel | Get-Member
$excel | Get-Member と $excel.GetType().DeclaredMembersの結果が違うのは何なんだろう…
メモ¶
最近のExcelはJavaScript APIなんて備えていたのか
- https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-overview
- https://docs.microsoft.com/ja-jp/office/dev/add-ins/reference/overview/excel-add-ins-reference-overview