製品コラム
セイテクエンジニアのブログ 製品コラム PowerShell: Excelシートからセルの値を取得したい-Windows FAQ(仮)
2024年10月16日配信
2025年04月25日更新
執筆者:セイ・テクノロジーズ エバンジェリスト
Officeアプリのコントロールと言えばVBA(Visual Basic for Applications)ですが、PowerShellからもCOMインターフェイスを介してOfficeアプリと比較的簡単にやり取りすることができます。例えば、弊社製品「SSD-assistance」は、サーバーからデータを収集し、Excel(.xlsx)形式のサーバー設定仕様書を自動生成しますが、その設定仕様書から特定の値を取得できれば現在のシステム設定との比較や、再設定に応用できるでしょう。
今回はSSD-assistanceのサーバー設定仕様書を例にしていますが、PowerShellからExcelワークシートを扱う、汎用的な方法として紹介します。なお、この操作を行うには、ローカルコンピューターにMicrosoft 365(Office)アプリがインストールされている必要があります。
画面1は、「Windows設定仕様書【基本設定】」デザインを選択して自動生成させたサーバー設定仕様書です。ご覧のように、「表紙」(Sheet1)から始まる、複数のシートから構成されるExcelワークシート(.xlsx)形式のファイルです。一例として、「システム設定」という名前のシートの「コンピューター名」の値(セルのアドレスJ17)をPowerShellから取得してみましょう。
画面1 サンプルのサーバー設定仕様書
PowerShellのウィンドウ(powershell.exeまたはpwsh.exe)を開き、以下のコマンドラインを順番に実行します。すると、$range.Value()が目的の値を返します(画面2)。
画面2 COMインターフェイス経由でExcelワークシートを開き、特定のシートのセルの値を取得する
先ほどのPowerShellのコマンドラインを、汎用的なスクリプトにしたものが、次の「getvaluefromsheet.ps1」です。このスクリプトを次のように実行することで、指定したExcelワークシートの指定したシートから、指定したセルのアドレスの値を取得できます(画面3)。このスクリプトは、SSD-assistanceのサーバー設定仕様書に限定されず、任意のExcelワークシートに利用できます。
画面3 画面2を汎用化したスクリプト「getvaluefromsheet.ps1」
[getvaluefromsheet.ps1](getvaluefromsheet.txt形式でダウンロード)