在Google工作表脚本中将项目搜索为“工具栏”

时间:2019-04-09 21:03:49

标签: google-apps-script google-sheets

我正在尝试在工具栏中添加“搜索项”选项。 基本上,我在同一个Google工作表中有6个不同的标签,但是每个工作表中的项目数太多,用户可能找不到。

是否可以使用Google表格脚本在工具栏中添加此类工具?

https://docs.google.com/spreadsheets/d/1lbfbMUhwKGG0CJ1tJuXVmwCRPAox_1dIATffhKVjkQM/edit?usp=sharing

上面是示例数据的链接

数据是从广告服务器系统的API生成的

在我的真实数据中,“创意”列包含大约1000多个唯一条目

在“创造性”搜索工作中,是否有可能将选项放置在工具栏中的方法,可以告诉我们创造性“ c6”在“第一”标签的第二行中找到。

但是只能在“未隐藏”标签中搜索这些项目

由于有多个标签,我不确定应该从哪里开始。

有人可以给我建议吗?

1 个答案:

答案 0 :(得分:0)

  • 输入搜索值。
    • 您要通过菜单栏运行Google Apps脚本。
  • 使用搜索值在每张纸上搜索“ A”列,并在“ A”列中找到搜索值时,它将检索该行。
    • 有些工作表不想用于搜索。
  • 您要显示如下结果。

    Creative "C6" was found in "Second", "fifth" tab
    Second Tab: Impression:100 / Click:100
    Fifth Tab: Impression:100 / Click:100
    

我像上面那样理解。如果我的理解是正确的,那么该示例脚本如何?请只考虑其中之一。

流量:

  1. 打开电子表格时,将添加自定义菜单。
  2. 从自定义菜单的“显示提示”运行脚本。这样,将打开一个对话框。
  3. 在文本输入字段中输入搜索文本,然后单击“确定”按钮。
  4. 在脚本中,使用输入的搜索文本使用TextFinder搜索行。
  5. 通过对话框显示结果作为示例。

示例脚本:

在运行脚本之前,请将工作表名称设置为sheets

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show prompt', 'showPrompt')
      .addToUi();
}

function showPrompt() {
  // Please set the sheet name you want to use for searching.
  var sheets = ["first", "second", "third", "fourth", "fifth", "sixth"];

  var ui = SpreadsheetApp.getUi();
  var res = ui.prompt('Sample', 'Input search text:', ui.ButtonSet.OK_CANCEL);
  var button = res.getSelectedButton();
  if (button == ui.Button.OK) {
    var findText = res.getResponseText();
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var header = "Creative \"" + findText + "\" was found in ";
    var values = "";
    var object = sheets.reduce(function(obj, sheetName, i) {
      var sheet = ss.getSheetByName(sheetName);
      var textFinder = sheet.createTextFinder(findText);
      var searchedRows = textFinder.findAll().reduce(function(ar, e) {
        if (e.getColumn() == 1) {
          var row = sheet.getRange(e.getRow(), 1, 1, sheet.getLastColumn()).getValues()[0];
          if (row[0] === findText) {
            ar.push(row);
            header += '"' + sheetName + '"' + (i == sheets.length - 1 ? " tab\n" : ", ");
            values += sheetName + " Tab: Impression:" + row[1] + " / Click:" + row[2] + "\n";
          }
        }
        return ar;
      }, []);
      if (searchedRows.length > 0) obj[sheetName] = searchedRows;
      return obj;
    }, {});
    Logger.log(object);
    ui.alert(header + values);
  }
}
输入:

enter image description here

输出:

enter image description here

注意:

  • 这是一个示例脚本。请根据您的情况进行修改。

参考文献:

编辑:

  • 未找到搜索文字时,您要显示“您搜索的广告不存在,请返回并检查是否有错字!”。

为了将您的上述请求反映到脚本中,请按如下所示修改上面的脚本。

发件人:

ui.alert(header + values);

收件人:

if (Object.keys(object).length > 0) {
  ui.alert(header.slice(0, -2) + " tab\n" + values);
} else {
  ui.alert("The creative you just searched for does not exist, please go back and check if there is any typo!");
}