Open5
Google Apps Scriptでスプレッドシート操作
ピン留めされたアイテム
スプレッドシート操作メモ
- Google Apps Scriptの情報もGoogle検索で容易に見つけることができるものの練度が足りないと欲しい結果に行きつかない。
- 趣味プログラミングでは過去に試した内容を流用することも多いため、ひとまずメモを残すこととする。
Apps Scriptリファレンス
-
Class Sheet
- よく利用するSheetクラス
フォルダ名とファイル名を指定しスプレッドシート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);
}
Googleドライブ上のExcelファイルの値を取得する
- 何も設定を行わない状態ではExcelの値取得はエラーになる
- Google Drive APIをGASで有効にする必要がある