我帮助维护一个Google电子表格,其中通过HTML表单添加新数据。
在添加新数据时,新数据的插入点取决于其中一个表单字段(应用程序接收日期)。
脚本找到工作表中应插入数据的位置,并执行3项操作:
问题是单元格A到I是基于值的(从表单填充),单元格M到O也是如此,但单元格J,K,L是基于A到I中某些单元格的计算。
这意味着我必须对getRange / setValues进行2次调用,有时进行第二次调用(对单元格M,N,O的调用不起作用。结果是使用单元格A中的正确数据创建的新行我(以及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()调用无法设置值。
有什么想法吗?
答案 0 :(得分:1)
不是完全重新计算输出范围的位置,而是可以在行的开头获得“锚点”,然后使用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);