🙌
PowerShellでExcelの操作
概要
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();
}
シートの操作
新規作成
-
基本的な追加の仕方
$newSheet = $workBook.Worksheets.Add(); $newSheet.name = "New Sheet";
-
特定のシートの前に追加
# Sheet1/Sheet2/Sheet3がある想定 $targetSheet = $workBook.Sheets("Sheet2"); $newSheet = $workBook.Worksheets.Add($targetSheet); $newSheet.name = "New Sheet";
-
特定のシートの前に追加
# Sheet1/Sheet2/Sheet3がある想定 $targetSheet = $workBook.Sheets("Sheet2"); $newSheet = $workBook.Worksheets.Add([System.Reflection.Missing]::Value, $targetSheet); $newSheet.name = "New Sheet";
-
シートの最後に追加
$lastSheet = $book.Sheets($book.Sheets.Count); $workBook.Worksheets.Add([System.Reflection.Missing]::Value, $lastSheet);
削除
アラートダイアログの表示を無効にしてから実施してください。
無効にしないと、反映できません。
$excel.DisplayAlerts = $FALSE # 警告を無視する。
-
シングルシート
$deleteWorkSheet = $workBook.Sheets("Sheet2"); $deleteWorkSheet.Delete();
-
マルチシート
$deleteWorkSheets = $workBook.Sheets(@("Sheet2", "Sheet3")); $deleteWorkSheets.Delete();
参照
-
インデックスの参照
$workBook.Sheets("Sheet1")
-
シート名の参照
$workBook.Sheets(1)
セルの操作
-
セル名での参照(Range)
$sheet.Range("A1")
-
セル座標の参照(Cell)
# 行番号&列番号 $sheet.Cells.Item(row, col)
参照
おまけ
エクセルの読み込みサンプル
Discussion