🙌

PowerShellでExcelの操作

2023/05/13に公開

概要

Windows環境でExcelを操作する時、VBAは第一候補ではないかと思います。
VBAは古くからの文法なので、現代人のコーダーとして使いにくいです。
高度の操作はJavaやC#などを使ったほうが効率は良いですが、簡単な編集なれば、PowerShellも悪くないですよね。

Excelの簡単な操作を少し纏めて置きます。

Excelファイルの操作

ファイルの新規作成

ワークブックのインスタンスのAdd()を使って、ファイルを新規追加します。

$workBook = $excel.Workbooks.Add();
Excel作成スクリプト
create-excel.ps1
Set-StrictMode -Version latest;

try {
    # Excelコンポーネント
    $excel = New-Object -ComObject Excel.Application;

    # 表示状態にする
    $excel.Visible = $true;

    # 新規のワークブック
    $workBook = $excel.Workbooks.Add();

    # >>>>>> Excelの操作 <<<<<<

    # 保存する。
    $excel.DisplayAlerts = $FALSE  # 警告を無視する。
    $workBook.SaveAs("$($Env:HOMEPATH)\Desktop\new.xlsx");
} finally {
    # Excelを終了する。
    $excel.Quit()

    $excel = $null;
    [GC]::Collect();
}

既存ファイルの編集

ワークブックのインスタンスのOpen("excel path")を使って、ファイルを開きます。

$workBook = $excel.Workbooks.Open("$($Env:HOMEPATH)\Desktop\new.xlsx");
Excelの開きスクリプト
open-excel.ps1
Set-StrictMode -Version latest;

try {
    # Excelコンポーネント
    $excel = New-Object -ComObject Excel.Application;

    # 表示状態とする
    $excel.Visible = $true;

    # 既存のワークブックの開き
    $workBook = $excel.Workbooks.Open("$($Env:HOMEPATH)\Desktop\new.xlsx");

    # >>>>>> Excelの操作 <<<<<<

    # ファイルを保存する。
    $workBook.Save();
} finally {
    # Excelを終了する。
    $excel.Quit()

    $excel = $null;
    [GC]::Collect();
}

シートの操作

新規作成

  1. 基本的な追加の仕方

    $newSheet = $workBook.Worksheets.Add();
    $newSheet.name = "New Sheet";
    
  2. 特定のシートの前に追加

    # Sheet1/Sheet2/Sheet3がある想定
    $targetSheet = $workBook.Sheets("Sheet2");
    $newSheet = $workBook.Worksheets.Add($targetSheet);
    $newSheet.name = "New Sheet";
    
  3. 特定のシートの前に追加

    # Sheet1/Sheet2/Sheet3がある想定
    $targetSheet = $workBook.Sheets("Sheet2");
    $newSheet = $workBook.Worksheets.Add([System.Reflection.Missing]::Value, $targetSheet);
    $newSheet.name = "New Sheet";
    
  4. シートの最後に追加

    $lastSheet = $book.Sheets($book.Sheets.Count);
    $workBook.Worksheets.Add([System.Reflection.Missing]::Value, $lastSheet);
    

削除

アラートダイアログの表示を無効にしてから実施してください。
無効にしないと、反映できません。

$excel.DisplayAlerts = $FALSE  # 警告を無視する。
  1. シングルシート

    $deleteWorkSheet = $workBook.Sheets("Sheet2");
    $deleteWorkSheet.Delete();
    
  2. マルチシート

    $deleteWorkSheets = $workBook.Sheets(@("Sheet2", "Sheet3"));
    $deleteWorkSheets.Delete();
    

参照

  1. インデックスの参照

    $workBook.Sheets("Sheet1")
    
  2. シート名の参照

    $workBook.Sheets(1)
    

セルの操作

  1. セル名での参照(Range)

    $sheet.Range("A1")
    
  2. セル座標の参照(Cell)

    # 行番号&列番号
    $sheet.Cells.Item(row, col)
    

参照

  1. 【PowerShell】Excel チートシート
  2. VBAだけじゃない!PowerShellでもExcel操作

おまけ

エクセルの読み込みサンプル

https://github.com/gekal-study-powershell/excel-sample/blob/main/print-all-sheet-names.ps1

Discussion