1

我创建了一个非常简单的 Apps 脚本,它基于通过 Google 表单提供的答案,制作模板的副本(表单答案电子表格中的表格)并用输入的信息填写它。这是代码的一部分:

function fichas() {
var formato = SpreadsheetApp.getActiveSpreadsheet();
var ficha = formato.duplicateActiveSheet();
var respuestas = SpreadsheetApp.openById('ID').getSheetByName('Form Responses');

var name = respuestas.getRange(**2**, 5);
var apellido = ficha.getRange(4, 2);
name.copyTo(apellido);

var name2 = respuestas.getRange(**2**, 6);
var apellido2 = ficha.getRange(4, 3);
name2.copyTo(apellido2);

粗体数字代表第一个用户的信息。我设置了一个触发器,在提交表单时运行脚本。现在,我不知道如何移动到下一行以使用下一个用户的信息(换句话说,我想在每次脚本运行时自动将该粗体数字加一)。可能吗?我是新手,我正在努力学习,但有时太难了!

我真的很感谢你的帮助!

乔治

4

1 回答 1

0

您应该使用所有用户通用的变量,并且在每次提交表单时递增。有几种可能的方法来实现这一点,为什么不试试script Properties 呢?实现起来相当简单:

首先用这样的语句初始化它:

ScriptProperties.setProperty('rowValue', 1);// this must happen only once, you could insert it in a small function to "initialize"

然后在您的代码中,您可以使用

var rowValue = Number(ScriptProperties.getProperty('rowValue'));

使用递增并将其rowValue++写回存储...请记住,您始终可以直接在脚本属性中编辑此值(脚本编辑器>文件>项目属性>项目属性)

ScriptProperties.setProperty('rowValue', rowValue);

如果您永远不会让多个用户同时发送表单,这将是完美的。在这种情况下,脚本存在混合值的风险......

还有另一种服务可以处理这种情况:锁服务

该文档给出了一个关于如何实现它的明确示例:它就像这样:

 var lock = LockService.getPublicLock();
 try {
   lock.waitLock(10000);
 } catch (e) {
   Logger.log('Could not obtain lock after 10 seconds.');
 }

做你必须做的,增加计数器......当你完成使用

lock.releaseLock();

它可能看起来很复杂,但事实并非如此 ;-) 并且它在所有可能的情况下都能完美地工作……试一试。

于 2013-07-16T22:44:17.810 回答