目的
私はコマンドプロンプトが好きだ。なんでもGUIに頼ると画面を開くだけで終わってしまう。
というわけで、コマンドプロンプトでexelの内容を更新することを考えた。
端末はwindowsでpowershellを使っているということを前提にしている。
概要
1)読み込みコマンドをpowershellに登録
2)データを入力
3)save
読み込みコマンドをpowershellに登録
次のコマンドを$profileに設定しておく
function exrd($file){
$global:ex = new-object -com excel.application
$bk=$null
if ($file[0] -eq '.'){
$file2 = $file.substring(1)
$global:bk = $global:ex.workbooks.open("$pwd$file2")
}else{
$global:bk = $global:ex.workbooks.open($file)
}
}
$global:というのは変数をfunctionの範囲ではなく、自分の使っているpowershellの変数に書き込むということだ。
データを入力
上の定義があれば
exrd [excelファイル名]
で$bkという変数にデータが読み込まれている。
例えば、excelのsheet1の4行目のA,D列のデータを入力したい場合は
$bk.sheets(1).range("A4:D4").value2=(1,2,3)
みたいにすれば、入力ができる。
内容を確認したい場合は
$ex.visible = $true
で更新した内容を見ることが出来る。なんのことはない、excelを開いているということだ。
save
$bk.save()
$bk.close()
$ex.quit()
$ex=$null
[System.GC]::collect()
でおしまいである。これをexend()とかのfunctionにしておいてもいいかもしれない。
最後に
これらがあれば、全ての操作を1つのコマンドで片付けられる基本ができたので、
進捗だの不具合表だのうざい管理データをプロンプトで片付けられる。
本当はDBで連携する方がよっぽど便利だと思うのだが、未だにexcelがはびこっているので、ちょっとやってみた。ただ、安全だとは思うのだが、comobjectの堅牢性はよくわからない。
さらに、データがネット上にあるとか競合は?とかいわれてもそこまでは試験していない。
要するにアレだ、「利用は自己責任で・・」ってことですね。