Есть ли способ написать это, если заявления более эффективно? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть электронная таблица, где есть большое количество листов с подробной информацией по каждой «работе», которую может иметь человек, заполняющий этот лист.Чтобы очистить это, я написал скрипт, чтобы скрыть или показать листы, основываясь на том, какие задания они выбрали на первой странице листа - их можно выбрать до 3.

Сценарий ... работает, ноЯ получил ошибки, говоря, что он пытается сделать слишком много одновременно, и потерпел неудачу.Я не очень хороший программист, так что пока это не так.Я не ищу самый эффективный, я просто ищу что-то, что работает достаточно легко.

Я несколько раз погуглил проблему, но многие решения, которые я видел, казались не совсем точными.соответствует тому, что я делал, и включал в себя такие вещи, как массивы и словари?

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Character Sheet");
  var sheet2 = ss.getSheetByName("Marauder Abilities");
  var sheet3 = ss.getSheetByName("Warrior Abilities");
  var sheet4 = ss.getSheetByName("Dark Knight");
  var sheet5 = ss.getSheetByName("Gladiator");
  var sheet6 = ss.getSheetByName("Paladin");
  var sheet7 = ss.getSheetByName("Conjurer");
  var sheet8 = ss.getSheetByName("White Mage");
  var sheet9 = ss.getSheetByName("Arcanist");
  var sheet10 = ss.getSheetByName("Scholar");
  var sheet11 = ss.getSheetByName("Astrologian");
  var sheet12 = ss.getSheetByName("Pugilist");
  var sheet13 = ss.getSheetByName("Monk");
  var sheet14 = ss.getSheetByName("Lancer");
  var sheet15 = ss.getSheetByName("Dragoon");
  var sheet16 = ss.getSheetByName("Rogue");
  var sheet17 = ss.getSheetByName("Ninja");
  var sheet18 = ss.getSheetByName("Samurai");
  var sheet19 = ss.getSheetByName("Archer");
  var sheet20 = ss.getSheetByName("Bard");
  var sheet21 = ss.getSheetByName("Machinist");
  var sheet22 = ss.getSheetByName("Summoner");
  var sheet23 = ss.getSheetByName("Thaumaturge");
  var sheet24 = ss.getSheetByName("Black Mage");
  var sheet25 = ss.getSheetByName("Red Mage");
  var sheet26 = ss.getSheetByName("Garlean Pureblood");

  var cell1 = sheet1.getRange('B5');
  var cell2 = sheet1.getRange('C5');
  var cell3 = sheet1.getRange('D5');

  if (cell1.getValue() != "Marauder"||cell2.getValue() != "Marauder"||cell3.getValue() != "Marauder") {
    sheet2.hideSheet();
  }

  if (cell1.getValue() == "Marauder"||cell2.getValue() == "Marauder"||cell3.getValue() == "Marauder") {
    sheet2.showSheet();
  }

  if (cell1.getValue() != "Warrior"||cell2.getValue() != "Warrior"||cell3.getValue() != "Warrior") {
    sheet3.hideSheet();
  }

  if (cell1.getValue() == "Warrior"||cell2.getValue() == "Warrior"||cell3.getValue() == "Warrior") {
    sheet3.showSheet();
  }

  if (cell1.getValue() != "Dark Knight"||cell2.getValue() != "Dark Knight"||cell3.getValue() != "Dark Knight") {
    sheet4.hideSheet();
  }

  if (cell1.getValue() == "Dark Knight"||cell2.getValue() == "Dark Knight"||cell3.getValue() == "Dark Knight") {
    sheet4.showSheet();
  }

Это продолжается для всех 26 листов.

Есть ли более простой способ выписать эту массивную вещь?

Могу ли я сделать

if (cell1.getValue() == "Marauder"||cell2.getValue() == "Marauder"||cell3.getValue() == "Marauder") 
{
    sheet2.showSheet();
}
else
{
    sheet2.hideSheet();
}

1 Ответ

0 голосов
/ 13 мая 2019

Я думаю, что это делает:

function myFunction() {
  var sA=["Marauder Abilities","Warrior Abilities","Dark Knight","Gladiator","Paladin","Conjurer","White Mage","Arcanist","Scholar","Astrologian","Pugilist","Monk","Lancer","Dragoon","Rogue","Ninja","Samurai","Archer","Bard","Machinist","Summoner","Thaumaturge","Black Mage","Red Mage","Garlean Pureblood"];
  var cA=["Marauder","Warrior","Dark Knight","Gladiator","Paladin","Conjurer","White Mage","Arcanist","Scholar","Astrologian","Pugilist","Monk","Lancer","Dragoon","Rogue","Ninja","Samurai","Archer","Bard","Machinist","Summoner","Thaumaturge","Black Mage","Red Mage","Garlean Pureblood"];
  var ss=SpreadsheetApp.getActive();
  var sheet1=ss.getSheetByName("Character Sheet");
  var cells=sheet1.getRange('B5:D5').getValues()[0];
  var shts=ss.getSheets();
  for(var i=0;i<shts.length;i++) {
    var index=sA.indexOf(shts[i].getName());
    if(index>-1) {
      if(cells[0]!=cA[index] || cells[1]!=cA[index] || cells[2]!=cA[index]) {
        shts[i].hideSheet();
      }
      if(cells[0]==cA[index] || cells[1]==cA[index] || cells[2]==cA[index]) {
        shts[i].showSheet()
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...