書いた経緯
同じスプレッドシート内であれば、簡単にコピーできるけど違うスプレッドシートにコピーする場合はひと手間加える必要があったため
同じスプレッドシート内でのコピー方法
まずは同じスプレッドシート内でコピーするスクリプトです。
function copyToOtherSht() {
var ss = SpreadsheetApp.openById('スプレッドシートID');
var getRange = ss.getSheetByName('シート1').getRange('A1:C3');
var setCell = ss.getSheetByName('シート2').getRange('B4');
copyRange.copyTo(setCell);
}
注意点としては、CopyToメソッドはその前にシートオブジェクトを置くか、Rangeオブジェクトを置くかで()で指定するオブジェクトが変わってきます。
Sheetオブジェクト.copyTo(Spreadsheetオブジェクト);
Rangeオブジェクト.copyTo(Rangeオブジェクト);
コピー先を違うスプレッドシートにしてみる
function copyToOtherSht() {
var getsht = SpreadsheetApp.openById('スプレッドシートID(コピー元)').getSheetByName('シート1');
var getRange = getsht.getSheetByName('シート1').getRange('A1:C3');
var setCell = SpreadsheetApp.openById('スプレッドシートID(コピー先)').getSheetByName('シート1').getRange('B4');
getRange.copyTo(setCell); //ここでエラーになる
}
すると下記のエラーが出ていまします。
エラー内容どおり、copyToメソッドでは異なるスプレッドシートへコピーはできないようです。
エラーを回避して違うスプレッドシートへコピーする方法
上記のエラーを回避するために下記の手順を踏みます。
- コピーしたいシートをコピー先のスプレッドシートに移動
- コピーした先のスプレッドシートでコピーしたいRangeを指定
- コピー先を指定してコピー実行
- 移動させたシートの削除
function copyToOtherSht() {
var getSht = SpreadsheetApp.openById('スプレッドシートID(コピー元)').getSheetByName('シート1');
//1. コピーしたいシートをコピー先のスプレッドシートに移動
var activeSs = SpreadsheetApp.getActiveSpreadsheet();
var copySht = getSht.copyTo(activeSs);
//2. コピーした先のスプレッドシートでコピーしたいRangeを指定
var getRange = copySht.getRange('A1:C3');
//3. コピー先を指定してコピー実行
var setCell = activeSs.getSheetByName('シート1').getRange('D2');
getRange.copyTo(setCell);
//4. 移動させたシートの削除
activeSs.deleteSheet(copySht);
}