Google sheets 是否可以使用regexp获取查询函数(范围)中使用的图纸名称
我目前正在做一个“搜索”工作表(它只是一个具有多个工作表范围的查询功能)。它工作得很好,但有一件事与我有关,我想让它自动化,这样我就不必在每次创建新工作表时都返回到它 这是我的查询功能:Google sheets 是否可以使用regexp获取查询函数(范围)中使用的图纸名称,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,我目前正在做一个“搜索”工作表(它只是一个具有多个工作表范围的查询功能)。它工作得很好,但有一件事与我有关,我想让它自动化,这样我就不必在每次创建新工作表时都返回到它 这是我的查询功能: =查询({'type-sheetName'!A4:E;'type-sheetName2'!A4:E;};“选择*其中(较低的(Col2)包含“”,最小的(C1)和“”,或较低的(Col4)包含“”,较低的(C1)和“”);-1) 所以我的问题是: 是否可以在范围内自动添加图纸(例如,如果创建了type-shee
=查询({'type-sheetName'!A4:E;'type-sheetName2'!A4:E;};“选择*其中(较低的(Col2)包含“”,最小的(C1)和“”,或较低的(Col4)包含“”,较低的(C1)和“”);-1)
所以我的问题是:
是否可以在范围内自动添加图纸(例如,如果创建了type-sheetNameX
,则会将其添加到查询的范围列表中(如果图纸已删除(未隐藏))
我认为JS脚本可以做到这一点,但我不知道如何做到这一点
谢谢。根据我的测试和研究,我无法找到一种方法,在不使用应用程序脚本的情况下,在查询功能范围内自动添加工作表名称 建议 话虽如此,我已经创建了一个自定义函数
customQuery()
,该函数使用方法获取电子表格上的所有工作表名称(不包括“搜索”工作表),然后将名称放入数组。之后,代码将格式化=QUERY()
函数包含当前图纸名称及其范围。您可以参考以下信息:
代码
/**
* Custom function to add current sheet names and their ranges to the QUERY function
*/
function onOpen() { //[Optional] Created this custom menu to manually run the customQuery function to refresh the QUERY on the search sheet
var ui = SpreadsheetApp.getUi();
ui.createMenu('Refresh Query')
.addItem('Refresh', 'customQuery')
.addToUi();
}
function customQuery(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets();
var sheetNames = []; //To contain all of the sheet names on your Spreadsheet
var text = ""; //To contain all current sheet names on your Spreadsheet, except for 'search' sheet and to be formatted to be used in the QUERY function later
for(var x=0; x<sheet.length;x++){
if(sheet[x].getSheetName() != "search"){ //Will not include 'search' sheet
sheetNames[x] = sheet[x].getSheetName();
}
}
var lastIndex = sheetNames.length-1;
for(var x=0; x<sheetNames.length;x++){ //check every sheet names and format it for the QUERY function
if(x==0 ){ //First sheet name will have '{' at the beginning
text = text + "{\'"+sheetNames[x]+'\'!A4:E;';
}else{
if(x != lastIndex){ //Sheets names inside the last & end sheet names will have ';' at the end of each names
text = text + "\'"+sheetNames[x]+'\'!A4:E;';
}else{ //Last sheet name will not have ';' but '}' sign at the end
text = text + "\'"+sheetNames[x]+'\'!A4:E}';
}
}
}
var show = "=QUERY("+text+",\"SELECT * where Col1 <>''\")"; //Created this test query as I'm unable to replicate your original query on my end
var version2 = "=QUERY("+text+",\"SELECT * WHERE (LOWER(Col2) CONTAINS \"\"\"&MINUSCULE(C1)&\"\"\" OR LOWER(Col4) CONTAINS \"\"\"&LOWER(C1)&\"\"\")\";-1)";
Logger.log("Sample Query Function:\n" + show); //If you want to check your execution logs
Logger.log("Original Query Function:\n"+version2); //If you want to check your execution logs
ss.getActiveSheet().getRange('search!A1').setValue(show); // You can replace the value from 'show' to 'version2' on the .setValue() to use your original QUERY function.
}
/**
*自定义函数,用于将当前图纸名称及其范围添加到查询函数中
*/
函数onOpen(){//[可选]创建此自定义菜单以手动运行customQuery函数来刷新搜索表上的查询
var ui=SpreadsheetApp.getUi();
ui.createMenu('刷新查询')
.addItem('刷新','自定义查询')
.addToUi();
}
函数customQuery(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheets();
var sheetNames=[];//包含电子表格上的所有工作表名称
var text=”“;//在电子表格中包含除“搜索”工作表之外的所有当前工作表名称,并将其格式化以便稍后在查询功能中使用
对于(var x=0;xThanks)来说,您的答案信息丰富,解释力强!