如何在查找参考编号后更改Google表格中的状态列

时间:2016-11-07 22:43:34

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

我是'新手'程序员。尝试在formSubmit事件上进行简单的“状态更改”。非常感谢我的旅程中的任何帮助/帮助。

当用户填写表单(https://docs.google.com/a/gregbartonmba.com/forms/d/e/1FAIpQLSccMrgAWq95SOJO-1TC74lb4ri71aZzIWCMe342KmM66d6lqw/viewform)时,脚本就会运行。 - 查找其中包含ReferenceNumber的引用行(B列)。 - 将状态列(A列)中的值更改为新状态。

我有一些我尝试修改的示例代码但是我太过新手才能做到正确。我想我很亲密,但我有点失落......谢谢。

可在此处找到包含代码的工作表: https://docs.google.com/spreadsheets/d/1yXIggGwWg84CebcABTLxPcCd8YI7W7VJL7PmVkcjvJI/edit?usp=sharing

我的编码尝试发布在以下...

function changeStatus(e) { 
   var Status = e.values[0];
   var ReferenceNumber = e.values[1];


// Look up the cell in the sheet that contains the ReferenceNumber.
// Find the instance in range B2:B that has the ReferenceNumber entered.
// Then, change the code of the left-most cell (Status) to the new "Status"     (entered from form submission)

/* Modified code from example at: 
 http://stackoverflow.com/questions/18482143/google-scripts-search-spreadsheet-by-column-return-rows
*/


 var searchString = ReferenceNumber;
 var ss = SpreadsheetApp.openById("1yXIggGwWg84CebcABTLxPcCd8YI7W7VJL7PmVkcjvJI"); 
var column =1; //column Index   
var columnValues = ss.getRange(2, column, ss.getLastRow()).getValues(); //1st is header row
var searchResult = columnValues.findIndex(searchString); //Row Index - 2

if(searchResult != -1)
{
    //searchResult + 2 is row index.
             SpreadsheetApp.getActiveSpreadsheet().setActiveRange(ss.getRange(searchResult + 2, 3)).setValue("found here");
}
}

Array.prototype.findIndex = function(search){
  if(search == "") return false;
   for (var i=0; i<this.length; i++)
    if (this[i].toString().indexOf(search) > -1 ) return i;

  return -1;


  /* If reference number entered does not exist, show browser pop-up that states "Reference Number
 Does not exist. Please enter a valid reference number." 
  */ 


 /* Catch any errors and then send them via email to greg@gregbartonmba.com.  
   Need error-catching in case the reference number does NOT exist in the 
   sheet.  
*/   

}

1 个答案:

答案 0 :(得分:1)

第一个问题是电子表格类都使用基于1的索引,因此您需要使用

var column = 2; //column Index 

第二个问题是您尝试在电子表格上调用getRange,您需要:

var columnValues = ss.getSheetByName("MasterList").getRange(2, column, ss.getLastRow()).getValues();

第三个问题是您在String对象上运行String[][]的findIndex,这是一个字符串数组。
即使您只有一个列向量,GAS也会使用二维数组来明确数据的布局。
因为在javascript数组中,如果它们引用完全相同的内存位置并因此[1] == [1]为假,则它们只相等,我们需要深入检查数组。

而不是Array.prototype.findIndex让我们

Array.prototype.findIndexInColVector = function(search){
  if(search == "") return false;
   for (var i = 0; i < this.length; i++)
    if (this[i][0].toString().indexOf(search) > -1 ) return i;
  return -1;
}

然后我们可以

var searchResult = columnValues.findIndexInColVector(searchString); //Row Index - 2

第四个问题,然后,当您找到要尝试在电子表格中选择范围的行时,而不是工作表

ss.getSheetByName("MasterList").getRange(searchResult + 2, 3).setValue("found here");

当然要调整状态,然后使用

ss.getSheetByName("MasterList").getRange(searchResult + 2, 1).setValue(Status);