我有一个Google电子表格,其中包含多行和多列数据。
我想在电子表格的每一行中搜索某个短语,然后在新表格中打印出该行,如果该行包含其中一列数据中的短语(比如说D列)。
我的包含所有数据的工作表被创造性地称为“所有数据”。
同样,我的仅包含所选数据的工作表称为“选定数据”。
让我说我要找的那句话是“你好”。
目前在“选定数据”表中,我在单元格A1中有以下内容:
=QUERY('All the data'!A:D,"select find("hello",All the data!D:D)>0")
这会产生一个解析错误,我希望它能打印“All data”表中D列中包含“hello”的“All the data”表中的所有行。
我做错了什么?我使用正确的功能吗?还有其他更容易使用的功能吗?什么是正确的公式?
最终我想将其转换为Google Apps脚本。
答案 0 :(得分:4)
这是一个你可以尝试的'脚本解决方案'。有很多可能的方法,这是其中之一......
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');
Logger.log(datatocopy)
if (datatocopy!=-1){
otherSheet.getRange(otherSheet.getLastRow()+1,1,1,datatocopy[0].length).setValues(datatocopy);
}
}
//
function findRow(item) { ;// the actual search function
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheets()[0];
var values = sheet.getDataRange().getValues();
for(cc =0; cc < values.length; ++cc) {
if(values[cc].toString().match(item)==item){break};// here you can eventually use string modifiers like toLowerCase() to allow for wider search criteria
}
Logger.log(cc);// the array index in which the result was found, cc+1 is the Row index
if (cc==values.length){return -1}
var resultArray=sheet.getRange(cc+1,1,1,values[cc].length).getValues()
return resultArray ;// the returned value is a 2 dimensions array to use with setValues()
}
在你的评论之后,这是一个返回包含该项目的所有行的版本,我不得不更改错误捕获,但毕竟事情都很简单。
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()
}
答案 1 :(得分:3)
电子表格功能解决方案是:
=QUERY('All the data'!A:D;"select * where D contains 'hello'")
注意:这会找到&#34;你好&#34;在&#34;奥赛罗&#34;。