コンピュータや音楽の事書いてます

Excel操作のテンプレ

準備

using namespace Microsoft.Office.Interop.Excel
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Excel")

これは[Microsoft.Office.Interop.Excel.Range] などを [Range] と省略できるメリットがあるが、名前空間にうるさい人からは怒られるかも?
小規模なスクリプトなら問題ないと思う。

#新規Excelを立ち上げてファイルダイアログで開く場合
$excel = New-Object -ComObject excel.application
$excel.Visible=$true
$book = $excel.Workbooks.Open($excel.GetOpenFilename())
#立ち上げ中のExcelの場合
$excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
$book = $excel.Workbooks(1)

$rがRange型である判定

if($r -is [Range]){ echo Range型である }

$r1, $r2 の共通範囲があるか判定

if($excel.Intersect( $r1, $r2) -ne $null){ echo ある }