[英]Hyperlinks of multiple filtered views in google sheets using apps script
这是问题的延伸:
我有一张姓名表(A、B 和 C 列中的表 1)。 我想要在表 2、表 3 和表 4 中有人员的销售信息。
我想要一个用于在工作表 1 上过滤视图超链接的应用程序脚本。因此工作表 1 上的 A 列应该将您带到工作表 2 上的过滤视图。工作表 1 列 B 名称将在工作表 3 中具有过滤器视图的超链接。工作表 1 列 C 名称将在表 4 中包含过滤器视图的超链接。
到目前为止,我的代码仅从表 1 中的一列中获取名称,并从表 2 中获取超链接。如何循环浏览表 1 和表 2、3、4 中的 A、B 和 C 列。 继承人到目前为止我有什么?
如果可能,请提供代码以使用相同的方法删除过滤器视图(我的意思是根据您的列名 select,删除特定的过滤器视图)。 当我删除过滤视图时,我也想清除 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 列上的超链接来自工作表 2。 sheet1 B 列上的超链接应该来自工作表 3。 sheet1 列 C 上的超链接应该来自工作表 4。我在最后一张图片中附上了过滤器视图的示例图片。 Sheet 1 上 C 列中的“Vincent Lee”应具有 Sheet4 中所有“Vincent Lee”记录的超链接。
我相信你的目标如下。
在这种情况下,下面的示例脚本怎么样? 在此脚本中,我使用了您上一个问题中的示例脚本。
在使用此脚本之前, 请在 Google 高级服务中启用表格 API 。
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);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.