Я извлекаю данные из нескольких листов Google на один основной лист, используя скрипт Google Apps.Чтобы преобразовать даты в номера недель, я использую функцию листа ISOWEEKNUM()
для столбца 1. Я хочу отсортировать по номерам недель, а из-за заголовков я использую Range#sort
.
Проблема, с которой я столкнулся, заключается в том, что при выполнении теста getData()
сортировка не выполняется, вызов Range#sort
не действует.Если я сначала запускаю getData()
, а затем вручную запускаю мою функцию sortRange()
, она работает.
Есть ли что-то в записи ячеек с ISOWEEKNUM()
в них, а затем попытаться выполнить сортировку напрямую в том же исполнении скрипта?Что можно сделать, чтобы решить эту проблему без необходимости сортировки или запуска большего количества сценариев вручную?
function getData()
{
var thisSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = thisSpreadSheet.getSheetByName('Data');
var deliverySheets = listDeliverySheets();
var outputWeekAndTotal = [];
var outputCratesPerStore = [];
var i;
for(i = 0; i < deliverySheets.length; i++)
{
outputWeekAndTotal.push(["=ISOWEEKNUM(\""+deliverySheets[i].getRange("A2").getDisplayValue()+"\")", deliverySheets[i].getRange("L12").getValue()]);
outputCratesPerStore.push(deliverySheets[i].getRange("L5:L9").getValues());
}
dataSheet.getRange(2, 1, outputWeekAndTotal.length, outputWeekAndTotal[0].length)
.setValues(outputWeekAndTotal);
dataSheet.getRange(2, 3, outputCratesPerStore.length, outputCratesPerStore[0].length)
.setValues(outputCratesPerStore);
sortRange();
}
function sortRange()
{
var thisSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var rangeToSort = thisSpreadSheet.getSheetByName('Data').getRange(2, 1, 7, 7); /*Constants used temporarily*/
rangeToSort.sort({column: 1, ascending: true});
}