我帮助维护一个Google电子表格,通过HTML表单添加新数据。
当要添加新数据时,新数据的插入点取决于表单字段之一(“申请收到日期”)。
该脚本查找应在工作表中插入数据的位置,并执行3件事:
在正确的位置插入空白行
复制上面的行(因此将复制公式和条件格式)
用输入到表单中的值替换副本中单元格中的数据
问题在于,单元格A至I是基于值的(从表格填充),单元格M至O也是如此,但是单元格J,K,L是基于A到I中某些单元格的计算。
这意味着我必须对getRange / setValues进行两次调用,有时还要进行第二次调用(设置单元格M,N,O的调用不起作用。结果是在单元格A至I中使用正确的数据创建了新行(并且因此,J,K,L),但单元格M,N,O保持与上一行中的那些单元格相同。
这是相关的代码。
// Assign object data for cells A to I
var newvalues = [
[ username, applyDate, maritalStatus, sponsorApprovalDate, processingOffice, inProcessDate, extraDocsRequestedDate, nonVisaExempt, decisionMadeDate ]
];
// Set cells A to I with data from form
sheet.getRange('A' + startingRowIndex + ':I' + startingRowIndex).setValues(newvalues);
// Now assign object data for cells M to O
newvalues = [
[ coprReceivedDate, location, notes ]
];
// Set cells M to O with data from form
sheet.getRange('M' + startingRowIndex + ':O' + startingRowIndex).setValues(newvalues);
如上所述,第二个sheet.getRange('...')。SetValues()调用无法设置值。
有任何想法吗?
最佳答案
不必完全重新计算输出范围的位置,您可以在行的开头获得一个“锚点”,然后使用Range.offset()
方法来定义相对于锚点的其他范围。
// Assign object data for cells A to I
var newvalues = [
[ username, applyDate, maritalStatus, sponsorApprovalDate, processingOffice, inProcessDate, extraDocsRequestedDate, nonVisaExempt, decisionMadeDate ]
];
// Get range "anchor" for data from form
var newRow = sheet.getRange('A' + startingRowIndex );
// Set cells A to I with data from form
newRow.offset(0,0,newvalues.length,newvalues[0].length).setValues(newvalues);
// Now assign object data for cells M to O
newvalues = [
[ coprReceivedDate, location, notes ]
];
// Set cells M to O with data from form
newRow.offset(0,13,newvalues.length,newvalues[0].length).setValues(newvalues);
关于javascript - getRange/setValues并不总是有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33382785/