@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

新しいプロセスでExcelを起動する

tl;dr

PowerShellで以下を実行すればよい

(New-Object -ComObject Excel.Application).Visible = $true

続きではショートカットを作ってスタートメニューやPower ToysのPower Runから呼び出せるようにしている。

背景など

Excelで重い処理を走らせていると操作を受け付けなくなるので他のファイルを触れなくなる。 別のプロセスでExcelを起動すれば独立しているので自由に利用できる。 Power Queryのエディタも複数開くことができる。

PowerShellで解決する

COMオブジェクトのことはよく知らないが、ExcelアプリケーションのCOMオブジェクトを作ったらプロセスもできるみたいで、そのオブジェクトの可視フラグを立てればよい。

以前PowerQueryのクエリを抜き出すときにこのあたりはやったことがあった。

(New-Object -ComObject Excel.Application).Visible = $true

PowerRunで呼び出す

PowerRunで > commandの形で実行してもうまくいかなかったので代替案を探した。

どうやらスタートメニューにショートカットを作れば呼べるようだったので、それにならう。

github.com

ショートカットを作るためにPowerShellスクリプトを作る。内容はこれだけ。

(New-Object -ComObject Excel.Application).Visible = $true
Read-Host -Prompt "Press Enter to exit (also kills Excel)"

ファイルを右クリックでドラッグしてショートカットを作る。

プロパティを開いていじる。

  • ターゲットの頭に追記する。
    • 編集前
      • "C:\path\to\script.ps1"
    • 編集後
      • powershell.exe -ExecutionPolicy Bypass -File "C:\path\to\script.ps1"
  • RunのところでMinimizedを選ぶ

このショートカットを %APPDATA%\Microsoft\Windows\Start Menu\ に好きな名前で置くとスタートメニューから実行でき、PowerRunからも呼べる。

winaero.com

実行するとPowerShellのウィンドウが最小化されて残る。開いて何かキーを押すと終了するが、Excelも巻き込んで死ぬ。

LinuxBashでバックグラウンドにもっていってデタッチするみたいな方法が見つけられてないのでウィンドウを最小化しとくので我慢してる。