簡體   English   中英

谷歌表格中多個過濾視圖的超鏈接使用應用程序腳本

[英]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”記錄的超鏈接。

Sheet1pic

Sheet2 圖片

Sheet3 圖片

Sheet4 圖片

Vincent Lee 的示例過濾器視圖

我相信你的目標如下。

  • Google 電子表格中有 1 個源工作表和 3 個目標工作表。
  • 您希望從源工作表中檢索值,並使用從源工作表中檢索到的值創建目標工作表的過濾器視圖。
  • 源工作表的每一列對應於每個目標工作表。

在這種情況下,下面的示例腳本怎么樣? 在此腳本中,我使用了您上一個問題中的示例腳本。

示例腳本:

在使用此腳本之前, 請在 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.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM