getRange / setValues并不总是有效

时间:2015-10-28 04:10:58

标签: javascript google-apps-script google-sheets

我帮助维护一个Google电子表格,其中通过HTML表单添加新数据。

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

脚本找到工作表中应插入数据的位置,并执行3项操作:

  1. 在正确的位置插入空白行
  2. 复制上面的行(因此复制了公式和条件格式)
  3. 使用输入到表单
  4. 中的值替换副本中单元格中的数据

    问题是单元格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()调用无法设置值。

    有什么想法吗?

1 个答案:

答案 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);