這是




uj5u.com熱心網友回復:
我相信你的目標如下。
- Google 電子表格中有 1 個源作業表和 3 個目標作業表。
- 您想要從源作業表中檢索值并使用從源作業表中檢索到的值創建目標作業表的過濾器視圖。
- 源作業表的每一列對應于每個目標作業表。
在這種情況下,下面的示例腳本怎么樣?在此腳本中,我使用了您上一個問題中的示例腳本。
示例腳本:
在使用此腳本之前,請在 Advanced Google services 中啟用 Sheets 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);
});
}
參考:
- 方法:電子表格.batchUpdate
- AddFilterViewRequest
- 過濾視圖
- setRichTextValues(值)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406751.html
標籤:
