我是'新手'程序员。尝试在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.
*/
}
答案 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);