「セル」ではなく「シート」を操作するという段階へ
GAS011ではセル操作、GAS012ではRange一括操作を学びました。
これらを理解した次の段階が、シートそのものを操作する処理です。
シート操作は非常に便利ですが、
一方で「削除」「上書き」「コピー」といった取り返しのつかない操作も含みます。
この記事では、GASでシートを操作する基本として、
取得・追加・削除・コピーを安全に実装する方法を解説します。
GAS010(例外処理)・GAS009(設定管理)を前提にした、
実務で事故らない設計がテーマです。
目次
シート操作の全体像
GASにおけるシート操作は、次の流れで行います。
- Spreadsheet(ファイル)を取得
- Sheet(シート)を取得
- シートに対して操作を行う
ここで重要なのは、
「どのシートを操作しているか」を常に意識することです。
シート名の指定ミスは、そのまま事故につながります。
シートを取得する方法
最も基本となるのが、シート名を指定して取得する方法です。
const sheet = spreadsheet.getSheetByName('Sheet1');
このメソッドは、
指定した名前のシートが存在しない場合、null を返します。
そのため、実務では必ず存在チェックを行います。
if (!sheet) {
throw new Error('指定したシートが存在しません');
}
「nullチェックをしない」ことが、
シート操作事故の最大要因です。
新しいシートを追加する
新しいシートを追加するには、insertSheet を使います。
const newSheet = spreadsheet.insertSheet('新規シート');
同名のシートが存在する場合はエラーになります。
そのため、追加前に存在チェックを行うのが安全です。
const sheetName = '新規シート';
if (spreadsheet.getSheetByName(sheetName)) {
throw new Error('既にシートが存在します:' + sheetName);
}
spreadsheet.insertSheet(sheetName);
実務では「日付付き」「連番付き」でシートを作るケースも多く、
命名ルールを事前に決めておくと管理が楽になります。
シートを削除する(要注意)
シート削除は、GASの中でも最も危険な操作の1つです。
一度削除すると、元に戻せません。
削除には deleteSheet を使います。
spreadsheet.deleteSheet(sheet);
実務では、次のようなガードを必ず入れます。
- 削除対象のシート名をログに出す
- 「削除してよい条件」を明確にする
- try-catchで必ず囲む
「とりあえず削除」は絶対に避けましょう。
シートをコピーする
テンプレートを使った処理では、
シートコピーが非常に役立ちます。
const template = spreadsheet.getSheetByName('テンプレ');
const copiedSheet = template.copyTo(spreadsheet);
copiedSheet.setName('コピー後シート');
この方法で、
書式・数式を含めたシートをそのまま複製できます。
コピー後は、必ずシート名を変更してください。
変更しないと同名シートが増えて混乱します。
PropertiesService+try-catchによる安全設計
ここまでの操作を、安全にまとめた実務例を示します。
function createSheetFromTemplateSafe() {
try {
const props = PropertiesService.getScriptProperties();
const sheetName = props.getProperty('NEW_SHEET_NAME');
if (!sheetName) {
throw new Error('NEW_SHEET_NAME が未設定です');
}
const ss = SpreadsheetApp.getActiveSpreadsheet();
if (ss.getSheetByName(sheetName)) {
throw new Error('既にシートが存在します:' + sheetName);
}
const template = ss.getSheetByName('テンプレ');
if (!template) {
throw new Error('テンプレートシートが存在しません');
}
const newSheet = template.copyTo(ss);
newSheet.setName(sheetName);
Logger.log('シート作成完了:' + sheetName);
} catch (e) {
Logger.log('エラー発生(createSheetFromTemplateSafe):' + e.message);
}
}
この構成では、
設定・存在チェック・例外処理が明確に分離されています。
実務でよくある事故と対策
- 想定外のシートを削除 → シート名チェック必須
- 同名シート大量発生 → 命名ルールを固定
- テンプレ消失 → テンプレ存在チェック
シート操作は便利ですが、
「壊れたときの影響が大きい」領域です。
必ず安全設計を前提に組みましょう。
まとめ
この記事では、GASでシートを操作する方法として、
取得・追加・削除・コピーの基本を解説しました。
シート操作を正しく扱えるようになると、
帳票生成・月次処理・レポート自動化といった
実務自動化の幅が一気に広がります。
次回は、セルの「見た目」を制御する書式操作に進みます。
0 件のコメント:
コメントを投稿