2015-10-28 83 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);