見出し画像

【GAS】Google Apps Script 活用事例 テンプレートの書式をコピー先に反映するスクリプト

チームで使い回すと、書式がぐちゃぐちゃになる問題

スクリーンショット 2021-11-02 19.27.53

チームで表を使い回すと、コピペを繰り返している書式がぐちゃぐちゃになることがしばしばあります。そこで書式を意図した通りに復元できるスクリプトを書きたいなと思いました。

結論から言うと、更新頻度が高い、もしくはコピペをめちゃくちゃ繰り返すシートに関しては、テンプレートを残しておいて、その書式を読み取りコピーするというのが一番現実的かなと思いました。

2次元配列で、各セルの色を取得するスクリプト

//2次元配列でセルの色を取得出来る。
//交互の背景色は取得できない
function getBackgrounds() {
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('シート1');
 const backgrounds = sheet.getRange('A1:F7').getBackgroundObjects();

 console.log(backgrounds);

 const values = [];
 let array    = [];

 for(const background of backgrounds){
   for(const color of background){
     array.push(color.asRgbColor().asHexString());
   }
   values.push(array);
   array = [];
 }
 console.log(values);
}

スクリーンショット 2021-11-03 9.13.00

シートの特定範囲の書式をまるっとコピーする

//範囲全体、色、罫線含めてコピー可能
//新規シートを作成したフォーマットをコピーする時に使えそう
//ただし、復元する用途としては、あまり期待できない
function copyFormat() {
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('テンプレート');
 const copyTo      = spreadsheet.getSheetByName('コピー先');
 const sheetId     = copyTo.getSheetId();

 console.log(`コピー先のシートID: ${sheetId}`);

 const info = {
   row: 1,
   rowEnd: sheet.getLastRow(),
   column : 1,
   columnEnd: sheet.getLastColumn(),
 }
 
 //テンプレートの内容をコピー先に書式を反映する
 //copyFormatToRange(sheet, column, columnEnd, row, rowEnd) 
 sheet.getRange('A1:F7').copyFormatToRange(sheetId, info.column, info.columnEnd, info.row, info.rowEnd); 
 
}

復元しておくためには、書式を保持しておく必要があるんですよね。テンプレートとして書式を残しておいて、コピー先に反映する。シートが増えてしまいますが、これが現実的かもしれません。

上記ではセルの色を2次元配列として取得しましたが、こちらは書式(罫線や色も含めて)まるっとコピーが出来ます。getRange(row, column)と引数の指定が逆というややこしい仕様がありますが簡単でいいなと思いました。



この記事が気に入ったらサポートをしてみませんか?