Рабочий лист сортируется по функции скрипта приложения, только если он запускается вручную - PullRequest
0 голосов
/ 09 мая 2018

Я запускаю простой скрипт для сортировки моего Google Sheet

function sort() {
  //Variable for column to sort first
  var sortFirst = 7; //index of column to be sorted by; 1 = column A, 2 = column B, etc.
  var sortFirstAsc = false; //Set to false to sort descending 
  var headerRows = 1; 
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var sheetName = activeSheet.getSheetName(); //name of sheet to be sorted
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  var range = sheet.getRange(headerRows+1, 1, sheet.getMaxRows()-headerRows, sheet.getLastColumn());
  range.sort([{column: sortFirst, ascending: sortFirstAsc}]);
}

Проблема, с которой я сталкиваюсь, заключается в том, что она прекрасно работает, когда я запускаю ее вручную, но когда я запускаю ее через триггер, основанный на времени, он ничего не делает. Проверяя журналы, он показывает, что выполнено выполнено отлично, но результат на листе не отражает того, что он выполнен.

Вручную:

[18-05-08 16:26:28:854 PDT] Starting execution
[18-05-08 16:26:28:990 PDT] SpreadsheetApp.getActiveSheet() [0.131 seconds]
[18-05-08 16:26:28:990 PDT] Sheet.getSheetName() [0 seconds]
[18-05-08 16:26:28:991 PDT] SpreadsheetApp.getActive() [0 seconds]
[18-05-08 16:26:28:992 PDT] Spreadsheet.getSheetByName([Call]) [0 seconds]
[18-05-08 16:26:28:992 PDT] Sheet.getMaxRows() [0 seconds]
[18-05-08 16:26:29:087 PDT] Sheet.getLastColumn() [0.094 seconds]
[18-05-08 16:26:29:088 PDT] Sheet.getRange([2, 1, 999, 12]) [0 seconds]
[18-05-08 16:26:29:090 PDT] Range.sort([[{column=7.0, ascending=false}]]) [0 seconds]
[18-05-08 16:26:29:214 PDT] Execution succeeded [0.232 seconds total runtime]

Триггер на основе времени запуска:

[18-05-08 16:27:28:466 PDT] Starting execution
[18-05-08 16:27:28:775 PDT] SpreadsheetApp.getActiveSheet() [0.299 seconds]
[18-05-08 16:27:28:775 PDT] Sheet.getSheetName() [0 seconds]
[18-05-08 16:27:28:777 PDT] SpreadsheetApp.getActive() [0 seconds]
[18-05-08 16:27:28:777 PDT] Spreadsheet.getSheetByName([Call]) [0 seconds]
[18-05-08 16:27:28:778 PDT] Sheet.getMaxRows() [0 seconds]
[18-05-08 16:27:28:900 PDT] Sheet.getLastColumn() [0.121 seconds]
[18-05-08 16:27:28:901 PDT] Sheet.getRange([2, 1, 999, 12]) [0 seconds]
[18-05-08 16:27:28:902 PDT] Range.sort([[{column=7.0, ascending=false}]]) [0.001 seconds]
[18-05-08 16:27:29:038 PDT] Execution succeeded [0.429 seconds total runtime]

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 мая 2018

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

Модифицированный скрипт:

function sort() {
  //Variable for column to sort first
  var sortFirst = 7; //index of column to be sorted by; 1 = column A, 2 = column B, etc.
  var sortFirstAsc = false; //Set to false to sort descending 
  var headerRows = 1;

  var workbook = SpreadsheetApp.getActiveSpreadsheet(); // Modified
  var sheetName = "### sheet name ###"; // Added
  var sheet = workbook.getSheetByName(sheetName); // Added

  var range = sheet.getRange(headerRows+1, 1, sheet.getMaxRows()-headerRows, sheet.getLastColumn());
  range.sort([{column: sortFirst, ascending: sortFirstAsc}]);
}

Примечание:

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