Appearance
なぜ必要になったか?
スプレッドシートでシートを生成する場合、シートを新しく作成してシート名を設定すると約 1 分かかります。
例えば、ユーザーリストをもとにユーザーごとのシートを作成したい場合に、シートを一つずつ手動で作成するのは非効率です。 ユーザー数が多くなるほど、手動での作業は困難になります。(1 人あたり約 1 分とすると、60 名分を作るのに 1 時間です!!)
一括生成する方法
以下のスクリプトを使用することで、ユーザーリストusers
をもとにシートを一括生成することができます。
ts
function createSheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const users = ["user1", "user2", "user3"]; // ※ここにシート名のリストを用意する
users.forEach((user) => {
ss.insertSheet(user);
});
}
上記のスクリプトを実行すると、user1
、user2
、user3
のシートが一括生成されます。
シートからリストを取得して一括生成する方法
シートからユーザーリストを取得してシートを一括生成する方法も紹介します。
ts
function createSheetsFromSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("users"); // ※ここにユーザーリストのシート名を指定する
const users = sheet
.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn())
.getValues()
.flat(); // ※ここにユーザーリストの範囲を指定する
users.forEach((user) => {
ss.insertSheet(user);
});
}
上記のスクリプトを実行すると、users
シートから取得したユーザーリストをもとにシートが一括生成されます。
生成したシートのリンクを取得する方法
シートを一括生成した後、生成したシートのリンクを一覧にする方法を紹介します。
ts
function getSheetLinks() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
const sheetLinks = sheets.map((sheet) => {
return (
"https://docs.google.com/spreadsheets/d/" +
ss.getId() +
"/edit#gid=" +
sheet.getSheetId()
);
});
Logger.log(sheetLinks);
}
上記のスクリプトを実行すると、生成したシートのリンクがログに出力されます。
ユーザーリストにシートのリンクを追加する方法
ユーザーリストに生成したシートのリンクを追加する方法を紹介します。
ts
function getSheetLink(sheet) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ssId = ss.getId();
const sheetId = sheet.getSheetId();
return (
"https://docs.google.com/spreadsheets/d/" + ssId + "/edit#gid=" + sheetId
);
}
function addSheetLinksToUsers() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("users"); // ※ここにリストのシート名を指定する
const users = sheet
.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn())
.getValues()
.flat(); // ※ここにリストの範囲を指定する
users.forEach((user, index) => {
const newSheet = ss.insertSheet(user);
sheet.getRange(index + 1, 2).setValue(getSheetLink(newSheet)); // indexは0から始まるため、+1する
SpreadsheetApp.flush();
});
}
上記のスクリプトを実行すると、users
シートに生成したシートのリンクが追加されます。
getRange()の第二引数にリンクを追加したい列を指定してください。
第一引数、第二引数共に対応するセルは 1 から始まることに注意してください。
setValue()の後にSpreadsheetApp.flush()
を実行することで、生成したシートのリンクを即時反映させることができます。