【问题标题】:Google Spreadsheet, Creating multiple rows on form submit谷歌电子表格,在表单提交上创建多行
【发布时间】:2014-07-23 14:43:47
【问题描述】:

我有一个可写入电子表格的 Google 表单。

目前在表单 sumbmit 上创建了一个新行。

我想做的是; 在用户选择值 N 的表单上有一个数字字段。 提交表单后,我希望电子表格创建 N 行相同的数据。

我从几个方面考虑过。 如果它可以基于 N 自动化,那将是最好的。 或者,值 N 可以放置在隐藏列 H 中,并且电子表格上的脚本可以读取它并复制行 N 次,如果这样做的话,可能在列 H {N, N-1,...1} 中倒计时更轻松。

【问题讨论】:

  • 我必须使用 google-docs,因为这是一个遗留系统。
  • 啊,我明白你的意思了。我希望这可以通过表格来完成。在我提出可能的代码解决方案后,我会添加标签。

标签: google-apps-script google-sheets google-docs google-forms


【解决方案1】:

当表单提交脚本时;

  • 读取新数据
  • 获取行数或所需行数 (N)
  • 复制一个模板行,给 N 个空白行提供正确的 格式和功能
  • 将新数据复制到新的空白行中。

    函数 onSubmit() {
    // 表单提交到的工作表
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("FORM TARGET 1");
    var lastRow = sheet.getLastRow();
    // 从“FORM TARGET 1”中的指定列中读取新行数
    var N = sheet.getRange(lastRow, 1).getValue();

    // 我们将写入的工作表
    var sheetRec = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("目标");
    var lastColumn = sheetRec.getLastColumn();
    var lastRowT = sheetRec.getLastRow();

    //通过在模板行中复制N次创建N个新行
    var Template = sheetRec.getRange(2, 1, 1, lastColumn);
    对于 (j = 1; j Template.copyTo(sheetRec.getRange(lastRowT + j, 1));
    }

    // 将新数据值复制到行中
    var Val1 = sheet.getRange(row, 1);
    var Val2 = sheet.getRange(row, 5);
    var Val3 = sheet.getRange(row, 7);
    var Val4 = sheet.getRange(row, 8);
    Val1.copyValuesToRange(sheetRec, 1, 1, lastRowT + 1, lastRowT + N);
    Val2.copyValuesToRange(sheetRec, 2, 2, lastRowT + 1, lastRowT + N);
    Val3.copyValuesToRange(sheetRec, 4, 4, lastRowT + 1, lastRowT + N);
    Val4.copyValuesToRange(sheetRec, 5, 5, lastRowT + 1, lastRowT + N);
    }

我只从 FORM TARGET 1 复制某些单元格以及范围不能连续的原因是有原因的。

我必须使用 for 循环来复制模板行,因为 copyValuesToRange() 和 copyFormatsToRange() 不复制函数。我在某些列中有作用于复制数据的函数。

我已经更全面地讨论了这个问题here

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多