データスクリプトのコピーが機能しなくなった

Nov 25 2020

私はここで見つけたグーグルシートのスクリプトを使用しています:

Google App Scriptで1つのシートから別のシートにデータをコピーし、行を追加します。1つの小さな問題です。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Copy");
  var pasteSheet = ss.getSheetByName("Paste");

  // get source range
  var source = copySheet.getRange(2,2,12,2);
  // get destination range
  var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);

  // copy values to destination range
  source.copyTo(destination);

  // clear source values
  source.clearContent();
}

私が今それを実行しているとき、それは私にエラーを与えます:

ターゲット範囲の座標がシートの寸法の外側にあります。

以前は登場していませんでした。なぜそれがこれをしているのか誰かが知っていますか?

回答

1 Marios Nov 25 2020 at 18:31

問題:

エラーは次の行にあります:

var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);

pasteSheet.getLastRow()シートの一番下にある行番号を返します。次に、12行の範囲を検討しますが、コンテンツを含む最後の行のに行がありpasteSheetません。12

ソリューション:

pasteSheet:に行を追加します

または、insertRowsAfterを使用できます:

pasteSheet.insertRowsAfter(pasteSheet.getLastRow(), 12)

コードスニペット:

function myFunction() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Copy");
  var pasteSheet = ss.getSheetByName("Paste");

  // get source range
  var source = copySheet.getRange(2,2,12,2);
  // insert rows to make sure you have enough space
  pasteSheet.insertRowsAfter(pasteSheet.getLastRow(), 12)
  // get destination range
  var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);
   
  // copy values to destination range
  source.copyTo(destination);

  // clear source values
  source.clearContent();
}