Слияние скриптов без потери функциональности - PullRequest
0 голосов
/ 01 марта 2019

Я могу запустить следующий код для добавления динамической формулы в столбец:

function addFormulaSortCol() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("FY 19 Tracker");
  var cell = sheet.getRange("U2:U");

  cell.setFormula(
    "=IF(AND(COUNTA(INDIRECT(ADDRESS(ROW(),1)):INDIRECT(ADDRESS(ROW(),20)))>=1,ISBLANK(INDIRECT(ADDRESS(ROW(),10)))),DATE(1900,1,1),INDIRECT(ADDRESS(ROW(),10)))"
  );
}

И я могу запустить следующий код для сортировки записей на той же вкладке:

function sortDocs() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("FY 19 Tracker");
  var range = sheet.getRange("A2:Z500");

  // Sorts by the values in column 21 (U)
  range.sort({ column: 21, ascending: true });
}

Затем я объединяю два сценария:

function AddColFormulaThenSort() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("FY 19 Tracker");

  var cell = sheet.getRange("U2:U");
  var range = sheet.getRange("A2:Z500");

  // Adds dynamic formula to every cell in column U
  cell.setFormula(
    "=IF(AND(COUNTA(INDIRECT(ADDRESS(ROW(),1)):INDIRECT(ADDRESS(ROW(),20)))>=1,ISBLANK(INDIRECT(ADDRESS(ROW(),10)))),DATE(1900,1,1),INDIRECT(ADDRESS(ROW(),10)))"
  );

  // Sorts by the values in column 21 (U)
  range.sort({ column: 21, ascending: true });
}

Этот сценарий выполняется, но сортировка не происходит даже после повторного запуска.Как обновить код, чтобы разрешить это?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Попробуйте это:

function AddColFormulaThenSort() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=ss.getSheetByName("FY 19 Tracker");
  var rg1=sheet.getRange("U2:U");
  var fA=rg1.getFormulas();
  for(var i=0;i<fA.length;i++) {
    fA[i][0]="=IF(AND(COUNTA(INDIRECT(ADDRESS(ROW(),1)):INDIRECT(ADDRESS(ROW(),20)))>=1,ISBLANK(INDIRECT(ADDRESS(ROW(),10)))),DATE(1900,1,1),INDIRECT(ADDRESS(ROW(),10)))";
  }
  rg1.setFormulas(fA)
  SpreadsheetApp.flush();
  var rg2=sheet.getRange("A2:Z500");  
  rg2.sort({column: 21, ascending: true});
}
0 голосов
/ 02 марта 2019

Возможно, что сортировка вызывается до того, как формула сможет вычислить?

Можно попробовать добавить SpreadsheetApp.flush() между частью setFormula и частью sort.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...