Скрипт Google работает медленно - PullRequest
0 голосов
/ 05 мая 2020

Итак, у меня есть лист, на котором я добавил пользовательское меню (которое я искал и нашел в Google).

Пользовательское меню показывает диалоговое окно (см. Изображение ниже). Оно возвращает все проверки данных, которые у меня есть в определенной c ячейке, каждая из которых имеет флажок, поэтому я могу выбрать несколько параметров и вернуть их в одной ячейке.

см. изображение здесь

Но кнопка FILL CURRENT CELL работает медленно!

У меня есть вот этот набор кодов:

code.gs

   function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu('Custom Menu')
  .addItem('Show Dialog', 'showDialog')
  .addToUi();
}
function showDialog() {
  var html = HtmlService.createTemplateFromFile('page').evaluate();
  SpreadsheetApp.getUi()
  .showSidebar(html);
}
var valid = function(){
  try{
    return SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Bw-CW5JZX-MEjPKhrWSNA2zWkqJTR6W3yM2yDrqjE_0/edit#gid=0').getRange('B1').getDataValidation().getCriteriaValues()[0].getValues();
  }catch(e){
    return null
  }
}
function fillCell(e){
  var s = [];
  for(var i in e){
    if(i.substr(0, 2) == 'ch') s.push(e[i]);
  }
  if(s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
}

page. html

    <div style="font-family: arial;">
<? var data = valid(); ?>
<form id="form" name="form">
<? if(Object.prototype.toString.call(data) === '[object Array]') { ?>
<? for (var i = 0; i < data.length; i++) { ?>
<? for (var j = 0; j < data[i].length; j++) { ?>
<input type="checkbox" id="ch<?= '' + i + j ?>" name="ch<?= '' + i + j ?>" value="<?= data[i][j] ?>"><?= data[i][j] ?><br>
<? } ?>
<? } ?>
<? } else { ?>
<p>Maybe current cell doesn't have <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation...</a></p>
<? } ?>
<br>
<br>


<input type="button" value="Fill Current Cell" onclick="google.script.run.fillCell(this.parentNode)" />
<input type="button" value="Clear Selections" onclick="reset()" />
</form>
</div>

Кто-нибудь может мне помочь, чтобы кнопка FILL CURRENT CELL работала быстрее?

1 Ответ

0 голосов
/ 11 мая 2020

Просто чтобы оставить ответ:

Учтите, что google.script.run необходимо взаимодействовать с сервером каждый раз, когда вызывается, поэтому у вас будут проблемы с производительностью по сравнению с запуском той же функции непосредственно из редактора.

Так что, если у вас небольшая разница во времени, как вы заявили в комментариях, не волнуйтесь, это нормальное поведение.

...