Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » PowerShellでExcelファイルを上書き保存する

PowerShellでExcelファイルを上書き保存する

「powershell excel 保存 force」
「powershell excel 強制的に上書き」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

PowerShellスクリプトからExcelを上書き保存するには、どのようなコードを書けばいいのか探していた方による検索キーワードです。

「powershell excel 保存ダイアログ非表示」
「powershell エクセル うがわき保存 ダイアログが表示される」
という検索キーワードも、同じことを探していらしたのかもしれません。

[スポンサードリンク]

Excelファイルを上書き保存するサンプルスクリプト

私自身は、PowerShellを使うことはほとんどありませんが、簡単なスクリプトを書いてみました。【2016-08-15 16:10追記:参照したCOMオブジェクトの解放処理についてご指摘いただいたので書き直しました。$excel.Quit後の部分は、面倒くささを感じていただくほうが良さそうに感じますので、あえて冗長な記述にしています。】
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$books = $excel.Workbooks
$book = $books.Open("C:\tmp\samp.xlsx")
$sheets = $book.Sheets
$sheet = $sheets.Item(1)
$range = $sheet.Range("A1")
$range.Value2 = Get-Date
$book.Save()
$book.Close()
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($range) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheets) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($books) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
[System.GC]::Collect()

上記のスクリプトを実行すると、C:\tmp\samp.xlsx ファイルを開いて、先頭のワークシートのA1セルに、現在の日付と時刻を書き込んでから、上書き保存してExcelを終了します。

サンプルスクリプトの解説

「powershell excel 保存 force」
「powershell excel 強制的に上書き」
といった検索をなさったということは、保存をせずにいきなり、
  $book.Close()
のように、WorkbookオブジェクトのCloseメソッドを実行したのでしょう。

上書き保存をするのなら、Workbook.Closeを実行する前に、Workbook.Saveメソッドを実行しましょう。

そうすればClose時に、保存確認メッセージは表示されなくなります。

上記のスクリプトでは、
  $book.Save()
  $book.Close()
と、ブックを保存して、閉じるという手順を踏んでいますが、Workbook.Saveを使わず、Workbook.Closeメソッドの第1引数にTrueを指定して、
  # $book.Save()
  $book.Close($true)
というコードでも、上書き保存して閉じることはできます。

ですが、PowerShellからCOMオブジェクトを利用する場合、一手間かけないと名前付き引数を使えないようですから、可読性を上げるために、SaveしてからCloseするほうがいいんじゃないかと感じます。

参照したCOMオブジェクトの解放処理について

追記したCOMオブジェクトの解放処理についてについては、Microsoft MVP(Office Development)のきぬあささんがツイートしてらっしゃる以下のページなども、ご参照ください。
[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » PowerShellでExcelファイルを上書き保存する

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.