Нашел этот код очень похож на то, что я хочу сделать.Первоначальная цель постеров заключалась в том, чтобы иметь возможность искать на листе слово «Hello» и заставлять его возвращать данные для каждой строки с найденным текстом.
function testfindRow(){ ;// this function only to test the other one by giving it a parameter and using its result.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var otherSheet=ss.getSheets()[1];// assuming there is a second sheet to copy to
var datatocopy=findRow('Hello');
if (datatocopy.length>0){
otherSheet.getRange(otherSheet.getLastRow()+1,1,datatocopy.length,datatocopy[0].length).setValues(datatocopy);
}
}
//
function findRow(item) { ;// the actual search function
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheets()[0];
var resultArray=new Array();
var values = sheet.getDataRange().getValues();
for(cc =0; cc < values.length; ++cc) {
if(values[cc].toString().match(item)==item){// here you can eventually use string modifiers like toLowerCase() to allow for wider search criteria
// or like this to search only in column D // if(values[cc][3].toString().match(item)==item){
resultArray.push(values[cc]);
};
}
Logger.log(resultArray);// the array of Rows in which the item was found,
return resultArray ;// the returned value is a 2 dimensions array to use with setValues()
}
}
Я планирую изменить для своего использования, но сначала удивляюсь,как заставить этот кусок кода выполняться в течение сценария?Я могу запустить testfindRow вручную, и он работает хорошо.Просто не автоматически.Мой сценарий работает до этой точки, а затем останавливается.Какой ключ к запуску этого кода будет дальше?
С ответом Купера, у меня теперь есть этот код:
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('PROCESS')
.addItem('Next Order', 'findAString')
.addToUi();
}
function findAString(){
var ss=SpreadsheetApp.getActive();
var sh1=ss.getActiveSheet();
var sh2=ss.getSheetByName('Responses');
if(!sh2){
ss.insertSheet('Responses');
}
var resp=SpreadsheetApp.getUi().prompt("Enter a String");
var rA=findRow(resp.getResponseText());
if (rA){
sh2.getRange(sh2.getLastRow()+1,1,rA.length,rA[0].length).setValues(rA);
}
}
Я получаю пункт меню ПРОЦЕСС, подвыбор Следующий порядок и поле вводавсплывает.Можно ввести там строку и выбрать «ОК», но затем скрипт жалуется.
ReferenceError: «findRow» не определено.
Нажим вперед?