質問

Googleシートでは、フォームレスポンスを持つシートがあり、フォーム列の右側には、Formulas for関数のフォームデータを使用する列があります。

スタート時に数式が行を伸ばしたので、新しいフォームの送信に取り組んでいましたが、新しいフォームの送信が行を消去することを発見しました:(。

は、iをインストールした後に手動で延長される代わりに、私はインストールされています。スクリプトが送信された後に数式を下げているのか。

今すぐ問題になっているのは、スクリプトが手動で実行されたときに機能することですが、フォームの送信をトリガーするように設定したときにその記号にの他のすべてのシートにコピーします。スプレッドシート。スプレッドシート全体をめくるように、その副作用は望まない。 :((

私が考えたことはスクリプトを編集することですので、すべてのシートではなく、あるフォームレスポンスシートでのみ機能します。しかし、私はそれをする方法がわかりません。

実行したいシートの名前は「要求」、およびcopyDown()です。

このスクリプトを編集するにはどうすればよいですか。

役に立ちましたか?

解決

コードのように特定のシートを実行するには、.getsheetbyname()メソッドを使用します。例えば:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var reqSh = ss.getSheetByName('Requests');
.

もう一つの方法があります。1枚のシートを純粋にフォームの提出に保ち、2枚目のシートのArrayFormulaを使用して、2番目のシートから同じ範囲内の値をコピーします。

= ArrayFormula( '要求'!A1:H)は列AからHをコピーします。

私はあなたと同じ問題を持っていました、そしてこれは解決策でした。私は範囲の右側の列の2番目のシートに数式を置き、通常の方法でそれらをコピーしました。第2シートのコピー範囲を参照する式。それは御馳走を働きました。

私は自分自身のアイデアを思い付きませんでした - 私はそれがGoogleスプレッドシートフォーラムの誰かによって提案されていたと確信しています。私はあなたに投稿へのリンクを与えるべきですが、私はちょうど見ただけで見つけることができません。

他のヒント

あなたのコードの中であなたは(コードのコメント)

 var sheets = ss.getSheets() [8]; // you choose sheet [8]
 var cellAddresses = new Object();
  for (var i=0; i<sheets.length; i++) { // but you enter a for loop that adresses every sheet in turn...
    var range = sheets[i].getDataRange();
.

このループを抑制し、あなたが先に進むシート番号のみを使用する必要があります...

最も簡単な方法はこのようなことをすることができます:

 var i = 8
 var sheets = ss.getSheets() [i];
 var cellAddresses = new Object();
    var range = sheets[i].getDataRange();
  ...
.

ループの最後に、forループをフィットする}を削除します。

編集:新しいコードは次のようにしてください。

function copydown() {
  setCopyDownUid();
  setCopyDownSid();
  logCopyDown();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets() [8];
  var cellAddresses = new Object();
  var i=8
//  for (var i=0; i<sheets.length; i++) {
    var range = sheets[i].getDataRange();
    var lastRow = range.getLastRow();
    var values = range.getValues();
    for (var j=0; j<values.length; j++) {
      for (var k=0; k<values[j].length; k++) {
        var test = values[j][k].toString();
        var start = test.indexOf("copydown");
          if (start == 0) {
            start = start+10;
            var end = test.length-2;
            var length = end-start;
            var value = test.substr(start, length);
            var col = k+1;
            var nextRow = j+2;
            var numRows = lastRow-(nextRow-1);
            if (numRows>0) {
              var destRange = sheets[i].getRange(nextRow, col, numRows, 1);
              destRange.clear();
              var newLastRow = sheets[i].getDataRange().getLastRow();
              var newNumRows = newLastRow-(nextRow-1);
              var newDestRange = sheets[i].getRange(nextRow, col, newNumRows, 1);
              var cell = sheets[i].getRange(nextRow-1, col);
              cell.setFormula(value);
              cell.copyTo(newDestRange);
            }
            var cellAddress = cell.getA1Notation();
            cellAddresses[cellAddress] = test;
          }
      }
    }
    Utilities.sleep(500);
    resetCellValues(cellAddresses, sheets[i]);
  }
//}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top