【GAS】スプレッドシートから書式も含めて他のスプレッドシートへコピーする方法

GAS

同じスプレッドシート内であれば、簡単にコピーできるけど違うスプレッドシートにコピーする場合はひと手間加える必要があったためコードを記載しました。

同じスプレッドシート内でのコピー方法

まずは同じスプレッドシート内でコピーするスクリプトです。

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); //ここでエラーになる
}

すると下記のエラーが出ていまします。
2019-07-15_15h44_33.jpg
エラー内容どおり、copyToメソッドでは異なるスプレッドシートへコピーはできないようです。

エラーを回避して違うスプレッドシートへコピーする方法

上記のエラーを回避するために下記の手順を踏みます。

  1. コピーしたいシートをコピー先のスプレッドシートに移動
  2. コピーした先のスプレッドシートでコピーしたいRangeを指定
  3. コピー先を指定してコピー実行
  4. 移動させたシートの削除
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);
}

コメント

タイトルとURLをコピーしました