Excelを開いたままでPowerShell

by manamana 21. 6月 2011 01:34

最近 PowerShell にはまっています。

PowerShell は、Win7/Server 2008R2 から 「標準搭載」 されたシェルスクリプト環境で、
Active Directory, Exchange, SQL Server の管理に深く関わっています・・・というか便利過ぎます。

関連情報はそれなりに出ていますが、すいません、正直無視していました。
現場で使ってみて、目から鱗が落ちました。 これはすばらしい環境です。


で、タイトルの内容です。
PowerShell から Excel を呼び出して操作する方法はよく知られていますが、
動作中の Excel を開く技はそれほど知られていないと思うので紹介します。

System.Runtime.InteropServices の機能を使い、動作中のオブジェクトを捕まえます。
Excel.Application のオブジェクトを捕まえて、Open中のブックと同名の WorkBook を取得する
ファンクション Get-ExcelBook() はこんな感じになります。


Function Get-ExcelBook($BookName)
{

    #=== 稼働中の Excel を捕まえる
    $ex = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")

    if ($ex -eq $null) { return $null }

    #=== Open中のWorkBookから目的のBookを見つける
    foreach ($bk in $ex.WorkBooks)
    {
        if ($bk.Name -eq $BookName)# 見つかった!
        {
            return $bk
        }
    }
    return $null
}

 
"Book1.xlsx" を開いている状態で、次のコマンドを実行してやれば、A1-A10に "ABC" と文字を打ちます。
 
$wb = Get-ExcelBook("Book1.xlsx")
for ($i = 1; $i -le 10; $i++)
{
    $cell = "A"+$i
    $wb.worksheets.item(1).Range($cell).Value2= "ABC"
}
 
 
従来のVBAは、.Net Framework に未対応であり、時代遅れの感があります。
といって、VSTO は配布が難しく、一般的ではないと感じています。
こうなったら、Office のマクロ環境が PowerShell になれば良いのにと思う今日この頃です。
 
 
(2013/01/24 追記)
発想を変えて、ExcelとPowerShellを融合させてみました。
Excel PowerShell Tool 

 

Tags:

Development

コメントを書く


スポンサーリンク

Calendar

<<  11月 2024  >>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

View posts in large calendar

Month List

Twitter