Google apps script 查找文本并将行复制到其他工作表
嗨,我有一个谷歌表单中的数据列表,我想用它根据另一个列表提取某些名字 下面的代码向我指出搜索字符串所在的行:Google apps script 查找文本并将行复制到其他工作表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,嗨,我有一个谷歌表单中的数据列表,我想用它根据另一个列表提取某些名字 下面的代码向我指出搜索字符串所在的行: function searchString(){ var sheet = SpreadsheetApp.getActiveSheet() var search_string = "searchname1" var textFinder = sheet.createTextFinder(search_string) var search_row = te
function searchString(){
var sheet = SpreadsheetApp.getActiveSheet()
var search_string = "searchname1"
var textFinder = sheet.createTextFinder(search_string)
var search_row = textFinder.findNext().getRow()
var ui = SpreadsheetApp.getUi();
ui.alert("search row: " + search_row)
}
我想了解如何添加多个搜索字符串,如下所示。这是一张相当多的单子。
我尝试了数组括号,但这给了我一个NULL错误
function searchString(){
var sheet = SpreadsheetApp.getActiveSheet()
var search_string = ("searchname1","searchname2")
var textFinder = sheet.createTextFinder(search_string)
var search_row = textFinder.findNext().getRow()
var ui = SpreadsheetApp.getUi();
ui.alert("search row: " + search_row)
}
然后,我希望将找到的行复制到新工作表中,而不是向我显示警报。
按搜索字符串数组的顺序排列。说明:
您的目标是将字符串第一次出现在源工作表中的行复制到目标工作表中
- 您可以在
数组中包含所有要搜索的字符串search\u strings
- 迭代每个字符串以找到它出现的第一行,并将该行添加到
数组中行
行
列表一部分的行:
var data = source_sheet.getDataRange()
.getValues().filter((_,i)=>rows.includes(i+1));
最后将数据复制到目标工作表
解决方案:
当我用10个名字尝试这个时,下面有一个小问题,它很有效。当我粘贴完整数组时。我得到以下错误。14:45:04错误类型错误:无法读取null(anoniem)@Code.gs:11 searchString@Code.gs的属性“getRow”:9@QuintenDeWilde嗯,我想你放了一些不在源代码表中的字符串。稍后我会修改代码来考虑这种情况。您可以在
textFinder
之后添加一个if条件,如if(!textFinder)
,并将接下来的两行放在if块中。如果你自己做不到,我会在几个小时内调整我的答案。我需要自己测试它,以确保它能像那样工作。我尝试了if(!textFinder),但遇到了其他语法问题。我猜我没有正确地实现它?@QuintenderWilde我更新了我的答案。我不知道它是否有效,我现在无法测试它。很抱歉,更改它时出现了一个新错误:15:04:06错误类型错误:无法读取未定义searchString@Code的属性“length”。gs:17如何定义长度?
function searchString(){
const ss = SpreadsheetApp.getActive();
const source_sheet = ss.getSheetByName('Sheet1'); // change the name
const target_sheet = ss.getSheetByName('Sheet2'); // change the name
const search_strings = ["searchname1","searchname2"]; // add your strings to search
const rows = [];
search_strings.forEach(search_string=>{
let textFinder = source_sheet.createTextFinder(search_string);
try{
let search_row = textFinder.findNext().getRow();
rows.push(search_row);
} catch(e){}
});
const data = source_sheet.getDataRange()
.getValues().filter((_,i)=>rows.includes(i+1));
if(data.length>0){
target_sheet.getRange(1,1,data.length,data[0].length).setValues(data);
}
}