Open5

Google Apps Scriptでスプレッドシート操作

ピン留めされたアイテム
ゆういちゆういち

スプレッドシート操作メモ

  • Google Apps Scriptの情報もGoogle検索で容易に見つけることができるものの練度が足りないと欲しい結果に行きつかない。
  • 趣味プログラミングでは過去に試した内容を流用することも多いため、ひとまずメモを残すこととする。

Apps Scriptリファレンス

ゆういちゆういち

フォルダ名とファイル名を指定しスプレッドシートIDを取得

外部のスプレッドシートを呼び出す際にスプレッドシートIDが必要となったため、フォルダ名とファイル名を指定してIDを取得

/**
 * スプレッドシートID取得(フォルダ+ファイル指定)
 *  指定フォルダ配下に存在するファイルのスプレッドシートIDを取得
 * @param [string] folderName - 探索対象フォルダ名
 * @param [string] fileName - スプレッドシートID取得対象ファイル名
 * @return スプレッドシートID or null
 */
function getSpreadsheetIdByFolderAndFileName(folderName, fileName) {
  var folder = DriveApp.getFoldersByName(folderName).next();
  var files = folder.getFilesByName(fileName);

  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType() === MimeType.GOOGLE_SHEETS) {
      return file.getId();
    }
  }

  return null;
}

呼び出し方

var folderName = "フォルダ名"
var fileName = "スプレッドシートのファイル名"
var spreadsheetId = getSpreadsheetIdByFolderAndFileName(folderName, fileName);

if (spreadsheetId) {
  Logger.log("Spreadsheet ID: " + spreadsheetId);
} else {
  Logger.log("Spreadsheet not found.");
}
ゆういちゆういち

外部スプレッドシートに書き込み

複数行追加する場合は、appendRowよりgetRange.setValuesを使用した方が速いらしい

appendRowで行追加

var spreadsheetId= "スプレッドシートID";
var sheetName = "シート名";

// 書き込み先のスプレッドシートを取得
var mySheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

// 追加データ
var values = ["1列目の値", "2列目の値"];
mySheet.appendRow(values);

setValuesで指定箇所からデータ書き込み

var spreadsheetId = "スプレッドシートID";
var sheetName = 'シート名';

// 書き込み先のスプレッドシートを取得
var mySheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

var data = [
  ['ぼんじり', 170],
  ['ハツ', 160],
  ['かわ', 150],
  ['砂肝', 200]
];

// A2からデータを書き込む
mySheet.getRange(2, 1, data.length, data[0].length).setValues(data);
ゆういちゆういち

スクリプトプロパティを取得する

プロパティサービスを使用することでKey-Valueでデータ保存することができる。
コード上に持ちたくないデータを格納するときに使用した。

参考

// プロパティ名を引数で渡し取得する関数
getMyProperties(propName) {
  return PropertiesService.getScriptProperties().getProperty(propName);
}