0

Googleスプレッドシート(​​ソースシート)に入力するGoogleフォームがあります。ソースシートから特定の列全体を新しいタブ/シートにプルするスクリプトを見つけてカスタマイズしました。スクリプトを正しく実行するには、両方のシートに同じ行数が必要です。そうでない場合は、エラーが返されます。新しいフォームが送信されるたびに、ソース シートに行が追加され、2 つのシートが同期されなくなり、スクリプトが壊れます。

既存のスクリプトに追加する必要がある関数 (またはスクリプトに加えられる変更) を理解するのを手伝ってほしいので、ソース シートに新しい行が表示されると (フォームが送信されたため)、空白の行が表示されます。ターゲット シートで。

スクリプトを微調整したり、新しい関数を追加したりする必要がありますか?

function importFunction(a) {
  var ss = SpreadsheetApp.openById("0ApTaY3v27-UqdElwZTBvanNpaC1UckpxaTJRZS1XNWc");
  var sourceSheet = ss.getSheets()[0];
  var ss2 = SpreadsheetApp.openById("0ApTaY3v27-UqdElwZTBvanNpaC1UckpxaTJRZS1XNWc");
  var targetSheet = ss2.getSheets()[1];
  var values1 = sourceSheet.setActiveSelection("C:C").getValues();
  var values2 = sourceSheet.setActiveSelection("AD:AD").getValues();
  var values3 = sourceSheet.setActiveSelection("D:E").getValues();
  var values4 = sourceSheet.setActiveSelection("AE:AE").getValues();
  var values5 = sourceSheet.setActiveSelection("F:H").getValues();
  var values6 = sourceSheet.setActiveSelection("N:U").getValues();
  targetSheet.setActiveSelection("A:A").setValues(values1);
  targetSheet.setActiveSelection("B:B").setValues(values2);
  targetSheet.setActiveSelection("C:D").setValues(values3);
  targetSheet.setActiveSelection("E:E").setValues(values4);
  targetSheet.setActiveSelection("F:H").setValues(values5);
  targetSheet.setActiveSelection("I:P").setValues(values6);
}

以下の提案に従って、スクリプトを次のように変更しようとしましたが、エラーが発生しました - メソッド appendRow() が見つかりません。どうすれば修正できますか?

    function importFunction(a) {
      var ss = SpreadsheetApp.openById("0ApTaY3v27-UqdElwZTBvanNpaC1UckpxaTJRZS1XNWc");
      var sourceSheet = ss.getSheets()[0];
      var ss2 = SpreadsheetApp.openById("0ApTaY3v27-UqdElwZTBvanNpaC1UckpxaTJRZS1XNWc");
      var targetSheet = ss2.getSheets()[1];
      var targetMax = targetSheet.getMaxRows();
      var values1 = sourceSheet.setActiveSelection("C:C").getValues();
      var values2 = sourceSheet.setActiveSelection("AD:AD").getValues();
      var values3 = sourceSheet.setActiveSelection("D:E").getValues();
      var values4 = sourceSheet.setActiveSelection("AE:AE").getValues();
      var values5 = sourceSheet.setActiveSelection("F:H").getValues();
      var values6 = sourceSheet.setActiveSelection("N:U").getValues();
      if(targetMax == values1.length) {
        targetSheet.setActiveSelection("A:A").setValues(values1);
        targetSheet.setActiveSelection("B:B").setValues(values2);
        targetSheet.setActiveSelection("C:D").setValues(values3);
        targetSheet.setActiveSelection("E:E").setValues(values4);
        targetSheet.setActiveSelection("F:H").setValues(values5);
        targetSheet.setActiveSelection("I:P").setValues(values6);
      }
      else
        targetSheet.appendRow();
    }
4

1 に答える 1

0

getMaxRows()を使用して値を書き込む前に、シート SS2 で使用可能な行数を確認し、それをデータ配列の長さと比較してから、value1.lengthこの比較に応じて、appendRow()を使用して必要な行を最終的に for に追加します。次のループ。

編集:あなたの編集に続いて、私はもう少しテストしましたが、appendRow()思ったように動作しないようです.空のシートの先頭に行を追加します...だから私はこれを試しました:

  if(targetMax < values1.length) {
  var RowsToAdd = values1.length-targetMax
  for(nn=0;nn<RowsToAdd;++nn){targetSheet.insertRowAfter(targetMax)}
  }

直後に置くだけvar value6=...

この小さなエラーで申し訳ありません;-)

于 2012-08-30T21:25:45.967 に答える