После нескольких поисков я пришел с кодом, который просматривает основной лист и показывает или скрывает листы (с именами от A до N) в зависимости от того, какой флажок отмечен / не отмечен (основное требование) .
Однако, похоже, что это не так эффективно, и требуется несколько секунд, чтобы по-настоящему показать / скрыть листы после того, как поставили галочки / сняли галочки с их соответствующих флажков. Недавно я узнал, что onEdit()
всегда запускается всякий раз, когда есть редактирование где-либо в электронной таблице.
Я хотел бы попросить совета, если возможно выполнить onEdit()
, только когда редактирование выполняется только по заданным c диапазоны, в частности B6: B20 основного лист (который содержит мои флажки) . Аналогично, вместо того, чтобы проходить по всем флажкам и показывать / скрывать листы, основываясь на том, что отмечено / не отмечено, возможно ли для onEdit()
обнаружить то, что было отмечено / снято галочкой среди флажков, и показать / скрыть соответствующий лист? Возможно, мы добавим несколько других листов в будущем, и это станет еще более неэффективным, если мы попытаемся масштабировать текущий код.
Вот код:
function onEdit(e) {
var sheet = e.source.getSheetByName("Main");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var A = ss.getSheetByName("A");
var B = ss.getSheetByName("B");
var C = ss.getSheetByName("C");
var D = ss.getSheetByName("D");
var E = ss.getSheetByName("E");
var F = ss.getSheetByName("F");
var G = ss.getSheetByName("G");
var H = ss.getSheetByName("H");
var I = ss.getSheetByName("I");
var J = ss.getSheetByName("J");
var K = ss.getSheetByName("K");
var L = ss.getSheetByName("L");
var M = ss.getSheetByName("M");
var N = ss.getSheetByName("N");
if(sheet.getRange('B6').getValue() === true){A.showSheet();}else{A.hideSheet();}
if(sheet.getRange('B7').getValue() === true){B.showSheet();}else{B.hideSheet();}
if(sheet.getRange('B8').getValue() === true){C.showSheet();}else{C.hideSheet();}
if(sheet.getRange('B9').getValue() === true){D.showSheet();}else{D.hideSheet();}
if(sheet.getRange('B10').getValue() === true){E.showSheet();}else{E.hideSheet();}
if(sheet.getRange('B11').getValue() === true){F.showSheet();}else{F.hideSheet();}
if(sheet.getRange('B12').getValue() === true){G.showSheet();}else{G.hideSheet();}
if(sheet.getRange('B13').getValue() === true){H.showSheet();}else{H.hideSheet();}
if(sheet.getRange('B14').getValue() === true){I.showSheet();}else{I.hideSheet();}
if(sheet.getRange('B15').getValue() === true){J.showSheet();}else{J.hideSheet();}
if(sheet.getRange('B17').getValue() === true){K.showSheet();}else{K.hideSheet();}
if(sheet.getRange('B18').getValue() === true){L.showSheet();}else{L.hideSheet();}
if(sheet.getRange('B19').getValue() === true){M.showSheet();}else{M.hideSheet();}
if(sheet.getRange('B20').getValue() === true){N.showSheet();}else{N.hideSheet();}
}
Аналогично, вот предварительный просмотр нашего Основного листа . На основе изображения должны отображаться листы B, E, J и K, а остальные должны быть скрыты: