ExcelをPowershellで自動化してみたくて調べてみました。なお検証はExcel2016のみですので、その点はご了承ください。
Excelの起動
- Excelファイル
test.xlsx
を開く場合
$excel = New-Object -ComObject Excel.Application
$excel.visible = $true
$file = $excel.Workbooks.Open("test.xlsx")
- 新規にExcelファイルを作成する場合
$excel = New-Object -ComObject Excel.Application
$excel.visible = $true
$file = $excel.Workbooks.Add()
- 既に起動されているExcelファイルを利用する場合
$excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
$file = $excel.Workbooks.item(1)
セルの操作
- セルにデータや式を入れる場合
下のプログラムは、シート計算
を選択し、セルA1
にデータ10
を入れ、セルB1
に式=A1*2
を入れるものです。
$sheet = $file.Worksheets.Item("計算")
$sheet.Cells(1,1) = 10
$sheet.Cells(1,2) = "=A1*2"
- セルのデータや式を標準出力に出す場合
下のプログラムは、シート計算
を選択し、セルB2
の値と式を標準出力に出しています。
$sheet = $file.Worksheets.Item("計算")
Write-Host $sheet.Cells(1,2).Value()
Write-Host $sheet.Cells(1,2).Formula()
その他の機能
- マクロを実行する
マクロMacro1
を実行します。
$excel.run("Macro1")
- メッセージボックスを表示する
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("内容","タイトル")
ファイルの保存と、Excelの修了
- 保存して終了する場合
$file.Save()
$file.close()
$file = $null
$excel.quit()
$excel = $null
[GC]::Collect()
- 名前を付けて保存して終了する場合
$file.SaveAs("test2.xlsx")
$file.close()
$file = $null
$excel.quit()
$excel = $null
[GC]::Collect()
- 保存をしないで終了する場合
$file.close()
$file = $null
$excel.quit()
$excel = $null
[GC]::Collect()
- ダイアログを出さない設定
上記の場合で、ダイアログが出て終了できない場合は、ダイアログを出さない設定をします。
$excel.DisplayAlerts = $False