Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 是否可以使用regexp获取查询函数(范围)中使用的图纸名称_Google Sheets_Google Sheets Formula - Fatal编程技术网

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)来说,您的答案信息丰富,解释力强!