2015-10-28 50 views
0

我帮助维护一个Google电子表格,通过HTML表单添加新数据。getRange/setValues并不总是工作

当涉及添加新数据时,新数据的插入点取决于其中一个表单字段(应用程序接收日期)。

的脚本发现其中在片材中的数据应当被插入并做三两件事:

  1. 插入空白行在正确的位置
  2. 份数上述(所以公式和条件格式的行被复制)
  3. 从副本替换在单元中的数据与所述值输入到表单

的问题是小区A〜I的基于值(从表单填充)单元格M到O也是如此,但单元格J,K,L是基于A到I中某些单元格的计算结果。

这意味着我必须对getRange/setValues进行2次调用,有时第二次调用设置单元格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()调用无法设置值。

任何想法?

+0

发生的频率?如果这种情况很少,那么脚本无法完全执行(因为表中没有交易),这是正常行为。 –

+0

现在正在发生100%的时间 – andrewb

+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);