プログラミング

【Powershell】Excelのプロセスが残る問題についての解決法!

※はてブより引っ越しました。

powershellでExcelを操作して正常に処理が終了しても、タスクマネージャーにいつまでも「Excel.exe」が残ってしまうことがあるんですよね。

そうすると最悪Excelが開かなくなることも。

そこでExcelオブジェクトの開放についてやってみました!

powershellでのExcelオブジェクトの操作方法

powershellではexcelを簡単に操作することができます。
簡単に使い方を説明すると

#excelオブジェクトを開く
$excel = New-Object -ComObject Excel.Application

#excel非表示
$excel.Visible = $false

#ブックを開く
$excelFile = $excel.Workbooks.Open("ファイルパス")

# Excelのシート
$sheet = $excel.Worksheets.Item("シート名またはシート番号")

#セルに値を編集
$cell= $sheet.Cells.Item(1,1) = "10"

#ブックを閉じる
$excelFile.Close()

#excelを閉じる
$excel.Quit()

※$excel.Visibleをfalseにしないと処理中にExcelが立ち上がる。

みたいな感じで使用できます。
powershellでexcelを操作する記事はたくさんあので、興味がある方は検索してみてくださいね。

処理終了時に残るExcelのプロセスを解放する

ここで問題なのは$excel.Quit()でexcelを閉じたにも関わらず。
タスクマネージャーを確認すると「excelのプロセスが残ってしまう」ことです。

「nullを代入する」

とか

「ガベージコレクションを最後に呼ぶ」

とかいろいろ試した結果

#excelのオブジェクトを解放
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel)

でプロセスを開放することができました!

先ほどのソースに追加すると

#excelオブジェクトを開く
$excel = New-Object -ComObject Excel.Application

#excel非表示
$excel.Visible = $false

#ブックを開く
$excelFile = $excel.Workbooks.Open("ファイルパス")

# Excelのシート
$sheet = $excel.Worksheets.Item("シート名またはシート番号")

#セルに値を編集
$cell= $sheet.Cells.Item(1,1) = "10"

#ブックを閉じる
$excelFile.Close()

#excelを閉じる
$excel.Quit()

#ここの行を追加
#comオブジェクトを開放
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($sheet)
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel)

となります。

[void]にしなくてもいいですが、こうするとコンソールで処理結果を確認することができます。コンソールに’1’とか表示される。
voidにしなくてもとくに処理には影響ないです。

powershellは開放する順番は関係なく開放してくれますが、.Netだとcomオブジェクトの開放に順番があるので注意!
excelでいうと 「セル → シート → excelオブジェクト 」の順番でないとプロセスが残ってしまいうんですよね。

powershellの曖昧なとこいいよね!!!

また「プロセスの開放」に時間がかかることがあるので、処理終了後にタスクマネージャーで「Excel.exe」をしばらく見てあげてください。
残っていても少し経ったら消えるはずです!

下記サイト参考にさせていただきました。ありがとうございます!
mtgpowershell.blogspot.jp

まとめ

処理終了時に残ることがあるExcelオブジェクトを解放することができました。

.Netの場合は開放する順番があるので要注意!

RECOMMEND

1

新卒で入社したけど『もう仕事を辞めたい』『我慢できない』という方に向けて。新卒入社でカフェのフロアスタッフとしてして働いたけれど、約1年で退職した私からアドバイスです。心がだめになるまで続ける必要なんてありません。

2

女性はライフステージによって休職や転職しなければいけないときがありますよね。
そこでこの記事では女性の転職に有利な資格をまとめてみました。
一生職に困らない、転職に有利な資格とはなにかご覧ください。

3

「今日は会社に行く気がしない・・。」「たまには会社をさぼりたい・・。」なんてことありませんか?本記事では、実際に私の周りで使われていた欠勤理由をご紹介します。今から使える欠勤理由です。本当に仕事に行きたくないときなど活用できると思うので、ぜひ読んでみてください。

-プログラミング

Copyright© Job search info , 2020 All Rights Reserved.