在Google表中,我有一个表单响应的表格,并且表单列的右侧我有一个具有函数的公式的列,用于使用函数的表单数据。

在开始时,我的公式延长了行,以便他们在新表单提交时工作,但发现新表单提交将清除划船:(。

而不是在每次提交后手动扩展公式 Andrew静止员的世代copyDown()脚本;在提交脚本后,它确实在脚本之后复制。 现在,我拥有的问题是脚本在手动运行时工作,但是当我设置触发表单时,它会在所有其他工作表上复制该帖子上的上述公式电子表格。我不希望这种副作用,因为它搞砸了整个电子表格。 :((

我所想做的是编辑脚本,所以它只适用于一个表单响应表,而不是所有的工作表。但我不知道该怎么做。

我希望它运行的工作表的名称是“请求”,以及gid=8

如何编辑此脚本只为该纸张工作?

有帮助吗?

解决方案

要获取代码以仅在特定工作表上运行,请使用.petsheetbyname()方法。例如:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var reqSh = ss.getSheetByName('Requests');
.

有另一种方式可能更容易。您可以尝试纯粹为表单提交而保留一张纸张,并在第二张纸中使用ArrayFormula将任何值从第一张复制到第二个纸张中的相同范围。

= strayformula('请求'!a1:h)将列a复制到h。

我有同样的问题,这是解决方案。我将我的公式放在柱子右侧的第二张上,并以正常方式复制它们。公式称为第二张复制范围。它的效果了。

我自己没有想到这个想法 - 我确信它是由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