Синхронизация вызовов функций в скрипте приложения Google - PullRequest
0 голосов
/ 11 июня 2018

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

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

код:

function sortByNumOfKeywords(lang, col, sheet) {

  var file = findFileByName("Translate Keywords List");

  var spreadsheet = SpreadsheetApp.openById(file.getId());

  //Getting the sheet name from the list above
  var sheet = findSheetByName(spreadsheet,'Spanish');

  //Getting Table bounds (Two-Dimensional array);
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();

  //add one column (Column H) to hold the number of words of each keyword in the first column
  addWordsCounterCol(sheet, col, lastRow, lastColumn);

  //sorting by the added column(H)
  sheet.sort(8, false);

}

//sets a new column at the end of the table with the number of keywords of each cell in the given Row
function addWordsCounterCol(sheet, col, lastRow, lastCol){ 
  sheet.activate();
  var colChar = String.fromCharCode(65 + col-1); //Converts the Col number to it cohherent Big letter
  var formulas = []; //Formulas will be set as a two-dimensional array
  for(var i=2; i<lastRow+1; i++){
    var cell = sheet.getRange("" +colChar + i);
    var numOfKeys = "=COUNTA(SPLIT(trim("+ colChar + i + "), \" \"))";
    formulas[i-2] = []; //initializing row with a new array
    formulas[i-2].push(""+numOfKeys); // each row has only one column, with this specific String
  }
  var cells = sheet.getRange("H2:H"+(lastRow));

  cells.setFormulas(formulas);
}

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте использовать flush().Применяет все ожидающие изменения таблицы.

В вашем коде он работает нормально:

...
SpreadsheetApp.flush();
//sorting by the added column(H)
sheet.sort(8, false);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...