我們公司在不同的物業修理電器,我想建立一個資料庫來搜索特定物業的每個電器的資訊及其特定的 apt/units,我創建了一個表格來開始這個程序,但我需要一些幫助復雜的編碼。
我首先為該屬性創建了一個框,然后創建了一個“Apt/Unit”框。這個想法是當我選擇一個屬性時,與該屬性相關的單位顯示在 Apt/Unit 框中的下拉/型別可搜索串列中。
然后我創建了一個“設備型別”框。此想法是選擇“APT /單位”時,它將顯示與該特定的“APT /單元”相關聯的設備的下拉/型可搜索串列。
然后我為設備的資訊(品牌、型號、序列號和顏色)創建了框,這更不言自明——一旦選擇了設備型別,它將顯示每個框的相應資訊器具。
這是 Google 表格的鏈接:
這是單子。
它的作業速度很慢。我建議改用本機過濾器。基本上,該腳本分別打開和關閉過濾器以及下拉選單的更改資料驗證。
更新
這里是另一個版本的腳本。它作業得更快,但它使用“幫助表”來存盤臨時資料(過濾表)。如果需要,您可以隱藏“幫助表”。
// global variables
var SS = SpreadsheetApp.getActiveSpreadsheet();
var SHEET_USERFACE = SS.getSheetByName('Userface');
var SHEET_DATA = SS.getSheetByName('Data');
var SHEET_HELPER = SS.getSheetByName('Helper'); // the hidden sheet with temp data
var PROPERTY_LIST = [...new Set(SHEET_DATA.getRange('a2:a').getValues().flat())]; // 'Property' list
var DATA_OBJ = {};
function onLoad() { reset() }
function onEdit(e) {
var {range, source, value} = e;
if (range.getSheet().getName() != 'Userface') return;
if (range.columnStart != 3) return;
if (![9,11,13,15,17,19,21].includes(range.rowStart)) return;
source.toast('Please, wait...');
// reset whenever the first menu is changing
if (range.rowStart == 9) {
reset();
source.getRange('c9').setValue(value);
}
var col_header = range.offset(0,-1).getValue();
update_sheet_helper(col_header, value);
update_all_dropdown_menus();
source.toast('The sheet has been updated');
}
function reset() {
SS.toast('Please wait...');
// copy data from SHEET_DATA to SHEET_HELPER
SHEET_USERFACE.getRange('c9:c21').clearContent().clearDataValidations();
SHEET_DATA.getDataRange().copyTo(SHEET_HELPER.clearContents().getRange(1,1));
update_data_obj();
update_all_dropdown_menus();
SS.toast('The sheet has been updated');
}
// make DATA_OBJECT from SHEET_HELPER
function update_data_obj() {
DATA_OBJ = {};
var [header, ...data] = SHEET_HELPER.getDataRange().getValues();
for (let i in header) DATA_OBJ[header[i]] = data.map(e => e[i]);
DATA_OBJ['Property'] = PROPERTY_LIST; // let 'Property' list will be full always
}
// remove from SHEET_DATA_HELPER all the rows
// that have no given value in column with given title
function update_sheet_helper(col_title, value) {
var [header, ...data] = SHEET_HELPER.getDataRange().getValues();
var col_index = header.indexOf(col_title);
data = data.filter(k => k[col_index] == value);
var table = [header, ...data];
SHEET_HELPER.clearContents().getRange(1,1,table.length, table[0].length).setValues(table);
update_data_obj();
}
function update_all_dropdown_menus() {
SHEET_USERFACE.getRange('b9:c21').getValues().forEach((row,i) => {
if (row[0] != '') set_data_validation(DATA_OBJ[row[0]], 'c' (i 9));
});
function set_data_validation(data, cell_address) {
var menu_list = [...new Set([...data])]; // remove duplicates from the array
var menu_rule = SpreadsheetApp.newDataValidation().requireValueInList(menu_list).build();
var cell_range = SHEET_USERFACE.getRange(cell_address)
cell_range.setDataValidation(menu_rule);
if (menu_list.length == 1) cell_range.setValue(menu_list[0]);
}
}
單子在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463292.html