使用应用程序脚本在Google Sheet中显示多个过滤视图的超链接

本教程将介绍使用应用程序脚本在Google Sheet中显示多个过滤视图的超链接的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

使用应用程序脚本在Google Sheet中显示多个过滤视图的超链接 教程 第1张

问题描述

这是question的扩展:

我有一张人名表(表1在A、B和C栏)。
我想要表2、表3和表4中人员的销售信息。

我需要一个用于工作表1上筛选视图超链接的应用程序脚本。因此,工作表1上的列A应将您带到工作表2上的筛选视图。工作表1列B的名称将具有工作表3中的筛选器视图的超链接。工作表1的列C名称将具有工作表4中的筛选器视图的超链接。

到目前为止,我的代码只从工作表1中的一列中获取名称,并从工作表2中获得超链接。怎么在工作表1和工作表2、3、4中的A、B和C列之间循环。以下是我到目前为止所拥有的内容?

如果可能,请使用相同的方法提供甚至删除筛选器视图的代码(我的意思是根据您选择的列名,删除特定的筛选器视图)。删除筛选器视图时,我希望同时清除Sheet1上的超链接(因为这些链接将不再存在)

function create_filter_view() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var sheet1 = ss.getSheetByName("Sheet1");
  var sheet2 = ss.getSheetByName("Sheet2");
  var sheetId2 = sheet2.getSheetId();
  var range1 = sheet1.getRange("A2:A" + sheet1.getLastRow());
  var values1 = range1.getValues();
  var requests = values1.map(([a]) => ({ addFilterView: { filter: { title: a, range: { sheetId: sheetId2, startRowIndex: 0, startColumnIndex: 0 }, filterSpecs: [{ columnIndex: 1, filterCriteria: { condition: { type: "TEXT_EQ", values: [{ userEnteredValue: a }] } } }] } } }));
  var response = Sheets.Spreadsheets.batchUpdate({ requests }, ssId);
  var filter_view_ids = response.replies.map(({ addFilterView: { filter: { filterViewId } } }) => filterViewId);
  var richTextValues = filter_view_ids.map((e, i) => [SpreadsheetApp.newRichTextValue().setText(values1[i][0]).setLinkUrl(`#gid=${sheetId2}&fvid=${e}`).build()]);
  range1.setRichTextValues(richTextValues);
}

示例表的图片如下:

Sheet1有3列:A、B、C。我希望Sheet1列A上的超链接来自Sheet 2。Sheet1列B上的超链接应来自Sheet 3。Sheet1列C上的超链接应来自Sheet 4。
我附上了一个例子,在最后一张图片的过滤器视图的图片。工作表1上C栏中的所有记录的超链接应为工作表4中的所有记录(&Q;文森特·李&Q)。

推荐答案

我相信您的目标如下。

    Google电子表格中有一个源表和3个目标表。

    您要从源工作表中检索值,并使用从源工作表中检索的值创建到目标工作表的筛选器视图。

    源工作表的每一列与每个目标工作表对应。

在这种情况下,下面的示例脚本怎么?在此脚本中,我使用了your previous question中的示例脚本。

示例脚本:

在使用此脚本之前,please enable Sheets API at Advanced Google services。

function create_filter_view() {
  // Please set the object for putting the filter views to the destination sheet using the values from the source sheet.
  var obj = { src: "Sheet1", dst: [{ col: 1, name: "Sheet2" }, { col: 2, name: "Sheet3" }, { col: 3, name: "Sheet4" }] };

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var src = ss.getSheetByName(obj.src);
  var values = src.getRange(2, 1, src.getLastRow(), src.getLastColumn()).getValues();
  obj.dst.forEach(({ col, name }) => {
 var dst = ss.getSheetByName(name);
 var dstId = dst.getSheetId();
 var requests = values.flatMap(r => {
var temp = r[col - 1];
if (temp.toString() != "") {
  return { addFilterView: { filter: { title: temp, range: { sheetId: dstId, startRowIndex: 0, startColumnIndex: 0 }, filterSpecs: [{ columnIndex: 1, filterCriteria: { condition: { type: "TEXT_EQ", values: [{ userEnteredValue: temp }] } } }] } } };
}
return [];
 });
 var response = Sheets.Spreadsheets.batchUpdate({ requests }, ssId);
 var filter_view_ids = response.replies.map(({ addFilterView: { filter: { filterViewId } } }) => filterViewId);
 var richTextValues = filter_view_ids.map((e, i) => [SpreadsheetApp.newRichTextValue().setText(values[i][col - 1]).setLinkUrl(`#gid=${dstId}&fvid=${e}`).build()]);
 src.getRange(2, col, richTextValues.length).setRichTextValues(richTextValues);
  });
}

引用:

    Method: spreadsheets.batchUpdate

    AddFilterViewRequest

    FilterView

    setRichTextValues(values)

好了关于使用应用程序脚本在Google Sheet中显示多个过滤视图的超链接的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。