welcome to tetsuyanbo web site!!

tetsuyanbo

C#

C#メモ Excelのexeの場所をフルパスで取得してみる

投稿日:2018/06/06

野暮用で必要になったんだけど、どうも納得いくものがなくて悩んだ。
レジストリから取得するのが一番手取り早いんだけど、レジストリの名前が変わったらメンテしないといけない。
かといって、xlsxみたいなファイルの拡張子からたどるのは、(もうないとは思うけど...)2003から2007で拡張子が変わったときみたいに変わる可能性があるので都度メンテしないといけない。
他に変わらなさそうなものは...商品名は変わらんだろうってことになり。

ってことで、今回のポイントはこんなとこ。
※Microsoft.Office.Interop.Excel.Application.PathはExcelのモジュールがあるフォルダーしか取得できないので今回は見送り...。

  • Microsoft.Office.Interop.Excel.ApplicationクラスをnewしてExcelのプロセスを作成する
    ※Excelのプロセスは必ずCOMの解放処理を行うこと!でないと、Excelのプロセスが残っちゃう...
  • System.Diagnostics.Process.GetProcessesByNameの引数に"Excel"を指定してExcelのプロセスを名前で検索する
  • 取得したプロセスのMainModule.FileNameプロパティで実行ファイルのフルパスを取得する

ExcelのCOMオブジェクトへの参照設定はあらかじめしておくこととして...コードはこんな感じ。

で、実行したらこんな感じ。

欠点はこんな感じ。

  • Excelプロセスが必ず作成される
  • Excelプロセスを破棄するときにCOMオブジェクトの解放を真面目にやらないといけない

ただ、同じような処理を考えればWordやPowerPointにも応用できそう。

そんなこんなで、明日への自分へのメモってことで。

-C#
-, , , , , , , , , , , , ,

Copyright© tetsuyanbo , 2018 All Rights Reserved Powered by STINGER.