2018年8月11日土曜日

【Powershell】Excelで $book.SaveAsで確認なしに上書きする方法

少子化、業務効率化、人手不足、働き方改革、自動化にともない、Excel を自動で操作したい場合もあるでしょう。Excel を VBA で操作する場合、$book.SaveAsでシートを保存すると、「上書きしますか?」ダイアログが表示されユーザの入力待ちになってしまいます。自動化の場合困りますよね。そんな場合、この警告を表示しないでクローズする方法を紹介します。

現象



$book.SaveAsで新規に作成したファイルをファイル名を使用して上書きする場合、警告を非表示にする方法を紹介します。

以下の場合、c:\temp\test.xlsxでsave使用とすると Excel画面で上書きの確認がされてしまいます。


#Excel を起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true

#Workbookを追加
$book = $excel.Workbooks.Add()

#追加されたsheetを取得
$sheet = $book.Sheets("Sheet1")

#値を設定
$sheet.Cells.Item(1, 1) = 1

#ファイルを保存
$book.SaveAs("c:\temp\test.xlsx")

#Excelを終了
$excel.Quit()

#プロセスを終了。これを実行しないと Excel.exe が残存してしまう。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)

対処


以下の行をSaveAsの前に追記します。これで上書き確認はされません。

$excel.DisplayAlerts = $FALSE



その他便利な PowerShell のFAQを紹介しています。マスターすれば作業効率200%アップするかもしれません。是非活用してください。

PowerShell の便利なサンプル一覧


以上