PowerShellよりエクセルの操作とGASでスプレッドシートの操作の比較

初めまして

Google Workspace のGASではスプレッドシートのみ操作となり、エクセルで作成した資料・纏め資料などの統計などは操作できない。でもエクセルはそのまま操作したい。
そこで、PowerShellのCOMを通してExcelを操作したい。

「Excel + PowerShell」と「Googleスプレッドシート + GAS」での比較についてまとめてみました。

ファイル(ブック)の読み込み

PowerShell + Excel

  $xlsx_file_path = "C¥temp¥test.exle"
 $excel = New-Object -ComObject Excel.Application
  $excel.Visible = $true
  $excel.DisplayAlerts = $true
  $book = $excel.Workbooks.Open($xlsx_file_path)

GAS + スプレッドシート

  var ss = SpreadsheetApp.getActiveSpreadsheet();

シートの読み込み

PowerShell + Excel

  $sheet = $book.Sheets.item("sheet_name")

GAS + スプレッドシート

  var sheet = spredSheet.getSheetByName("sheet_name");

アドレス指定(セールの値)

PowerShell + Excel

  # B5値を参照
  $val = $sheet.Range("B5").Text

  # B5値を更新
  $sheet.Range("B5") = "ここはB5値を更新"

GAS + スプレッドシート

  // B5値を参照
  var val = sheet.getRange("B5").getValue();

  // B5値を更新
  sheet.getRange("B5").setValue("ここはB5値を更新")

行・列番号の指定

PowerShell + Excel

Cells(row, column)を使います。
rawに行番号(1開始)、columnに列番号(これも1開始)を指定する。

  $val = $sheet.Cells(10, 2).Text
GAS + スプレッドシート

getRange(row, column)を使います。
引数はExcel+PowerShellと全く同じ。

  var val = sheet.getRange(10, 2).getValue();

行・列番号の範囲指定

PowerShell + Excel

Range() + Cell()を組み合わせます。
範囲の左上のセルと右下のセルをCell()で指定し、それをRange()に指定。

  $sheet.Range($sheet.Cells(5, 4), $sheet.Cells(7, 5)) = "範囲指定の値"

GAS + スプレッドシート

getRange(row, column, numRows, numColumns)を使います。

  sheet.getRange(5, 4, 3, 2).setValue("範囲指定の値;

最終行の取得

PowerShell + Excel

A1セルから連続して下方向に入力値がセットされているセルの最終行が取得できる。
空行がもしあれば、そこまでとなる。

  $lastrow = $sheet.Range("A1").End([Microsoft.Office.Interop.Excel.XlDirection]::xlDown.value__).Row

GAS + スプレッドシート

  var last = sheet.getLastRow();

保存 (PowerShell + Excel)

  # 上書き保存
 $book.Save()
  # 別名で保存
 $book.SaveAs($new_xlsx_file_path)

終了 (PowerShell + Excel)

  $book.Close()
  $excel.Quit()
  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
  [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)
ログイン ‹ コーポレートエンジニア — WordPress

コメント