為清晰起見進行了編輯并添加了影像
使用 Google Apps 腳本,我可以如何:
將第 2 部分作業表(G11:H11,帶有復選框和下拉選單)的范圍復制到范圍 G12:G25 N 次(基于與“第 2 部分”相同標題下的主下拉作業表中的非空行數!A2) 然后,
在每個下拉串列中設定不同的值(MASTER DROPDOWN 表中正確標題下列出的每個唯一值)。
例如,第一個影像是“MASTER DROPDOWN”表。

第二張圖片是“第 2 節”表。用戶可以使用頁面右側的按鈕添加或洗掉串列中的專案。

最后一張圖片是“第 2 節”表。我不明白如何為此撰寫代碼......當用戶按下“重置串列”按鈕時,我想復制復選框和下拉選單(來自 G11:H11)N 次(N = 3 基于來自的專案數第 2 節下的 MASTER DROPDOWN)。在每個下拉串列中,我想為 MASTER DROPDOWN 表中原始串列中的每個專案設定值。此程序應該是動態的,并且適用于第 1 節和第 3 節作業表(目前不在作業表中)。

非常感謝有關搜索/了解此類功能的腳本語言的任何建議,或腳本上的某些方向。這是到目前為止我的代碼的鏈接...
https://docs.google.com/spreadsheets/d/1ZdlJdhA0ZJOIwLA9dw5-y5v1FyLfRSywjmQ543EwMFQ/edit?usp=sharing
function newListAlert (){
var ui = SpreadsheetApp.getUi();
var response = ui.alert("Are you sure you want to delete your current list and create a new one?",ui.ButtonSet.YES_NO);
if(response == ui.Button.YES) {
newList();
} else {
}
}
function newList() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = ss.getRange("G11:H25");
var options = {contentsOnly: true, validationsOnly: true};
//clear current list
range.clear(options);
//add new item to list in first row of range
addNewItem();
//copy new datavalidation row above based on number of non-empty rows in MASTER DROPDOWN with same header as active sheet (-1)
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MASTER DROPDOWN");
var range = ss.getRange("A2");
if (range.getCell(1,1)){
var section = datass.getRange(1,1,1,datass.getLastColumn()).getValues();
var sectionIndex = section[0].indexOf(range.getValue()) 1;
var validationRange = datass.getRange(4,sectionIndex,19);//19 columns: checklist has a maximum of 18 rows ( 1 for "select option")
}
}
uj5u.com熱心網友回復:
在您的情況下,如何修改newList()如下?
修改后的腳本:
function newList() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var sheetName = sheet.getSheetName();
sheet.getRange("G11:H25").clear({ contentsOnly: true, validationsOnly: true });
var srcSheet = ss.getSheetByName("MASTER DROPDOWN");
var values = srcSheet.getDataRange().getValues();
var obj = values[0].map((_, c) => values.map(r => r[c])).reduce((o, [h, , , ...v], i) => {
if (h != "") {
v = v.filter(String);
v.shift();
o[h] = { values: v, range: srcSheet.getRange(4, i 1, v.length 1) };
}
return o;
}, {});
if (obj[sheetName]) {
var validationRule = SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.setHelpText('Select an option from the menu. To add more options to the dropdown list, go to MASTER DROPDOWN tab.')
.requireValueInRange(obj[sheetName].range, true)
.build();
var d = obj[sheetName].values.map(_ => [validationRule]);
var v = obj[sheetName].values.map(e => [e]);
sheet.getRange(sheet.getLastRow() 1, 8, obj[sheetName].values.length).setDataValidations(d).setValues(v).offset(0, -1).insertCheckboxes();
}
}
運行此腳本時,從作業表“MASTER DROPDOWN”中檢索 DataValidation 的值,并使用作業表名稱創建 dataValidation 規則,并將其放入“H”列。此外,復選框被放置在 dataValidations 相同行的“G”列中。
在這種情況下,例如,當您添加“第 1 節”的新作業表并運行時
newList(),將包含“工程”和“設計”的下拉串列放入“H”列,復選框也放入“列” G”。
筆記:
在此修改中,“Section 2”之類的作業表名稱用于搜索“MASTER DROPDOWN”作業表的列。所以請注意這一點。
而且,從您當前的腳本中,最后一行用于放入下拉串列和復選框。所以當你想修改這個時,請修改上面的腳本。
此示例腳本適用于您的示例電子表格。因此,當您的實際電子表格發生更改時,此腳本可能無法使用。請注意這一點。
參考:
- 設定資料驗證(規則)
- 插入復選框()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416498.html
標籤:
