GASを使用してシートをコピーしたい時に以下のようなコードを書きました。
function copySheet(ss, targetSheetName, newSheetName) {
var sheetTarget = ss.getSheetByName(targetSheetName);
var sheetNew = sheetTarget.copyTo(ss);
sheetNew.setName(newSheetName);
}
汎用性を持たせて上記のような形式にして、以下のように呼び出します。
var ss = SpreadsheetApp.getActiveSpreadsheet();
copySheet(ss, "対象のシート名", "新しいシート名");
この場合、シートを丸々コピーするので、関数も全てコピーされるんですね。
関数をコピーじゃなくて値をコピーしたい場合があり、以下のようにしました。
function copySheetByValue(ss, targetSheetName, newSheetName, newSheetIndex, targetColumn) {
var sheet = ss.getSheetByName(targetSheetName);
// シート新規作成
ss.insertSheet(newSheetName, newSheetIndex);
var sheetNew = ss.getSheetByName(newSheetName);
// コピーする内容を元シートから取得し、新シートに貼り付け
var copyValues = sheet.getRange(1, 1, 1000, targetColumn).getValues();
sheetNew.getRange(1, 1, copyValues.length, copyValues[0].length).setValues(copyValues);
}
呼び出し元は以下のような感じです。
var ss = SpreadsheetApp.getActiveSpreadsheet();
copySheetByValue(ss, "対象のシート名", "新しいシート名", 1, 10);
コピーする時は、元シートから値を取得して新シートに貼り付けるということをやっています。
この場合、コピーする対象の範囲(行、列)を指定したり、値だけの貼り付けなので、書式もコピーしたい場合は別途対応だったり、もうちょっと良いやり方がある気がしています。