我正在尝试修改此应用程序脚本,以便能够搜索包含特定ID(例如123)的工作表,并使该工作表可见/激活(如果工作表名为abc123def)。

如果我输入工作表abc123def的全名,下面的代码效果很好,但是我只想输入工作表名称的一部分,即ID(在本例中为123)。

这在PowerShell中对我有用:

$match = "123"
$text = Get-Content -Path $fulltext | Select-String -Pattern $match
$text | Out-File -FilePath $output


但是我不确定如何为下面的Apps脚本进行类似的匹配:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuItems=[{name: 'Go To Tab', functionName: 'goToTab'} ];
  ss.addMenu('Script', menuItems);
};

function goToTab() {
  var name = Browser.inputBox('Enter Tab Name:','',Browser.Buttons.OK_CANCEL);
  try {
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name).activate();
  }
  catch(e) {
    Browser.msgBox('Sheet named: "' + name + '" does not exists!');
  }
};

最佳答案

尝试这个:

function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuItems = [{
        name: 'Go To Tab',
        functionName: 'goToTab'
    }];
    ss.addMenu('Script', menuItems);
};

function goToTab() {
    var name = Browser.inputBox('Enter Tab Name:', '', Browser.Buttons.OK_CANCEL);
    if (name) {
        try {
            //create a regex out of "name"
            regexp = new RegExp(name, 'g');
            //get all the sheets
            var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
            //go through all the sheets
            for (var i = 0; i < sheets.length; i++) {
                //if sheet name matches the user entry then activate and go out of the loop
                if (sheets[i].getName().match(regexp)) {
                    sheets[i].activate();
                    break;
                }
            }
        } catch (e) {
            Browser.msgBox('Sheet named: "' + name + '" does not exists!');
        }
    }
};

关于javascript - 应用程序脚本以匹配包含ID的工作表名称并使其可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52468504/

10-14 04:58