【GAS】スプレッドシートに新しいシートを追加する(insertSheet)
Google Apps Script(GAS)でスプレッドシートに新しいシートを追加する方法を解説します。
もともと存在するシートをコピー(複製)する場合は下記の記事をご確認ください。
スプレッドシートにシートを追加
「スプレッドシートに新しいシートを追加する」という作業は、多くの方が普段から実施している簡単な作業かと思います。
例えば「月別にファイルが分かれている売上データを新シートに追加したい」といったシーンなど、GAS処理を開発しているときにも、スプレッドシートに新規でシートを追加したいシーンが出てきます。
こういった処理に対応するため、GASにはスプレッドシートで新しいシートを追加するメソッドが用意されています。
新シートを追加するにはinsertSheetメソッドを使う
新しいシートを追加するにはinsertSheetメソッドを使います。シンプルに新しいシートを追加してみましょう。
まずは、追加したいスプレッドシートを用意して、ファイルIDをコピーしておきます。(IDはURL上で確認できます)
サンプルコード
上記のスプレッドシートを読み込んで、シート追加する処理を実行します。
下記のサンプルコードでは「シート追加」という名称のシートを追加しています。
function insertSheet() {
//追加先のスプレッドシート
const spId = '[対象となるスプレッドシートのファイルID]';
let insert_ss = SpreadsheetApp.openById(spId);
let newSheet = insert_ss.insertSheet();
newSheet.setName('シート追加');
}
無事追加できたようです。
ちなみにsetNameメソッドでシート名を指定しないとエラーになります。
応用編:複数のスプレッドシートのデータをシートに分けて一つのスプレッドシートに集約
複数のスプレッドシートを集約する2つの方法
①「複数のスプレッドシートのデータを一つのシートの集約する」と②「複数のスプレッドシートのデータをシートに分けて一つのスプレッドシートの集約する」の方法があります。
①については同じデータ構造でないといけないので、共通列を持つ必要があります。こちらの方法を実行したい方は、下記の記事で解説をしています。
今回は②の複数のスプレッドシートのデータを、新たなスプレッドシートにシートを分けて集約する方法を解説します。
サンプルコード
function myFunction() {
//追加先のスプレッドシート
const spId = [集約先のスプレッドシートのID];
let insert_ss = SpreadsheetApp.openById(spId);
// 追加したいスプレッドシート読み込み
// フォルダの指定
const folderId = [転記したいスプレッドシートが格納されているフォルダのID];
//フォルダ内のすべてのファイルを取得
const folder = DriveApp.getFolderById(folderId);
//ファイルタイプを指定
const name = /売上データ.*/; //ファイル名が「売上データ~」となっているファイルが対象
const files = folder.getFiles(); // すべてのファイルを取得
//各ファイルごとに実行
while(files.hasNext()){
let file = files.next();
// name の正規表現に一致するファイルのみ処理
if(file.getName().match(name)){
let fileName = file.getName(); // ファイル名
let fileId = file.getId(); // ファイルID
// console.log([fileName,fileId,fileURL]);
let ss = SpreadsheetApp.openById(fileId);
let sheet = ss.getActiveSheet();
let values = sheet.getDataRange().getValues();
console.log(values);
let row = values.length;
let col = values[0].length;
let newSheet = insert_ss.insertSheet();
newSheet.setName(fileName);
newSheet.getRange(1,1,row,col).setValues(values);
}
}
}