セイテクエンジニアのブログ 製品コラム PowerShell: Excelシートからセルの値を取得したい-Windows FAQ(仮)
2024年10月16日配信
2024年10月16日更新
執筆者:セイ・テクノロジーズ エバンジェリスト
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形式でダウンロード)
2024年11月20日 | カスタム監視でHyper-Vレプリカの監視を強化-BOM for Windows活用例 |
---|---|
2024年11月13日 | カスタム監視でフェールオーバークラスターの監視を強化-BOM for Windows活用例 |
2024年11月06日 | IEのアンインストールの可否について-BOM for Windows FAQ(仮) |
2024年10月30日 | Windows Server CoreにBOMをインストールしてみた(サポート外) |
2024年10月23日 | ネットワークドライブの容量監視-BOM for Windows FAQ(仮) |
2024年10月16日 | PowerShell: Excelシートからセルの値を取得したい-Windows FAQ(仮) |
2024年10月09日 | VMのV2V移行、移行前と移行後で何が変わるの?-SSD-assistance活用例 |
2024年10月02日 | BOM 8.0のMicrosoft 365向けOAuth 2.0対応について-BOM for Windows FAQ(仮) |
2024年09月25日 | 英語版OSへのBOMのインストールについて-BOM for Windows FAQ(仮) |
2024年09月18日 | BOM製品が使用するネットワークポート-BOM for Windows FAQ(仮) |