プロジェクト

全般

プロフィール

PowerShellからExcelをあれこれ » 履歴 » バージョン 1

健二 酒井, 2019/09/24 21:05

1 1 健二 酒井
# PowerShellからExcelをあれこれ
2 1 健二 酒井
3 1 健二 酒井
## 概要
4 1 健二 酒井
5 1 健二 酒井
動かしたいなぁということで調べたことをまとめる。
6 1 健二 酒井
7 1 健二 酒井
### COMオブジェクト
8 1 健二 酒井
9 1 健二 酒井
Coponent Object Modelの略、Microsoftの技術。
10 1 健二 酒井
ソフトウェアを動かすためのインターフェースらしい。
11 1 健二 酒井
12 1 健二 酒井
参考 Wikipedia https://ja.wikipedia.org/wiki/Component_Object_Model
13 1 健二 酒井
14 1 健二 酒井
各アプリケーション(とその内部コンポーネント)を表現するオブジェクト群を使って、外部のプログラムからソフトウェアの機能を使えるようにしたしろもの。
15 1 健二 酒井
例えばExcelのCOMオブジェクトを呼ぶと丸ごとExcelのプロセスが起動する。
16 1 健二 酒井
17 1 健二 酒井
たぶんVBScriptとか、VBAとかも内部的にはこれを使っているんじゃないかなぁ。
18 1 健二 酒井
COMオブジェクトを抑えればVBAの勉強にもなる。その逆もしかり。
19 1 健二 酒井
膨大なプロパティ・メソッドが存在するのでVBAやマクロから学んだほうがいい気がする。
20 1 健二 酒井
21 1 健二 酒井
参考 Excelオブジェクトモデル https://docs.microsoft.com/ja-jp/visualstudio/vsto/excel-object-model-overview?view=vs-2019
22 1 健二 酒井
23 1 健二 酒井
### アンマネージド
24 1 健二 酒井
25 1 健二 酒井
.NETで動かすソフトウェアは基本、.NETの実行環境(CLR、共通言語ランタイム)が色々管理してくれる。
26 1 健二 酒井
ただし、.NET上で動いていないものを動かすとき、.NETはそのコードを管理できないためそこは管理外ということでunmanaged。
27 1 健二 酒井
アンマネージドなコードを実行するときは、リソースの開放とかを手動でやらなければならなくなったりする。
28 1 健二 酒井
例えば今回のExcelオブジェクトは開放し忘れるとExcelのプロセスが残り続けたりする。
29 1 健二 酒井
30 1 健二 酒井
生成は色々なときやるけど、COMオブジェクトの開放は以下のメソッドを使う。
31 1 健二 酒井
32 1 健二 酒井
> ' xlObjectの解放
33 1 健二 酒井
> System.Runtime.InteropServices.Marshal.ReleaseComObject(xlObject)
34 1 健二 酒井
35 1 健二 酒井
PowerShellでやるときは以下のようになるのかな。
36 1 健二 酒井
37 1 健二 酒井
```
38 1 健二 酒井
$ [System.Runtime.InteropServices.Marshal]::ReleaseComObject(xlObject)
39 1 健二 酒井
```
40 1 健二 酒井
41 1 健二 酒井
リソースがリークしないように開放するのは、生成したのと逆順に開放していくのがコツらしい。
42 1 健二 酒井
Excelの場合は、Application -> Workbook -> Worksheet -> Rangeっていうような階層構造になっているのでこの順番で開放していくことになるっぽい。
43 1 健二 酒井
 
44 1 健二 酒井
参考 COMオブジェクトを解放する http://exceldotnet.lance40.com/comrelease.html
45 1 健二 酒井
46 1 健二 酒井
### Excelの勉強
47 1 健二 酒井
48 1 健二 酒井
とりあえずこれ見ておこう。  
49 1 健二 酒井
Excelオブジェクトモデル https://docs.microsoft.com/ja-jp/visualstudio/vsto/excel-object-model-overview?view=vs-2019
50 1 健二 酒井
51 1 健二 酒井
VBA <-> COMオブジェクトと並行して考えられる・学べるのでVBAやVBScriptの解説サイト、コードを読むのも勉強になる。
52 1 健二 酒井
53 1 健二 酒井
そういや社会人最初の仕事はACCESS VBAだったなぁ。Accessのオブジェクトモデルも見たなぁ、懐かしい。
54 1 健二 酒井
55 1 健二 酒井
## 参考
56 1 健二 酒井
57 1 健二 酒井
- Wikipedia https://ja.wikipedia.org/wiki/Component_Object_Model
58 1 健二 酒井
- Excelオブジェクトモデル https://docs.microsoft.com/ja-jp/visualstudio/vsto/excel-object-model-overview?view=vs-2019
59 1 健二 酒井
- COMオブジェクトを解放する http://exceldotnet.lance40.com/comrelease.html