我的问题是脚本没有足够的时间来处理这么多行。
任务本身很简单。我在一个表中创建一个按钮,用于计算另一个表中选定日期或范围的值并插入结果。现在,我通过带有范围查询的公式收集结果,但该表需要大约 15 分钟才能加载。直到超过36000行。我取了 1000 个,将结果写入关联数组并将它们插入表中。但在 36000 后脚本停止。每天我都会添加约 1500 行,在月底我会删除上个月的数据。
最后一个选项能够处理最大数量的行:
// Ассоциотивный массив в который записываем собранные данные
var busines = {kovalev:{name:"ИП Попкин",ordersPc:[0,0,0],ordersRub:[0,0,0],salesPc:[0,0,0],salesRub:[0,0,0],advertPc:[0,0,0],advertRub:[0,0,0]},
soldatova:{name:"ИП Писькин",ordersPc:[0,0,0],ordersRub:[0,0,0],salesPc:[0,0,0],salesRub:[0,0,0],advertPc:[0,0,0],advertRub:[0,0,0]},
poberejnaia:{name:"ИП Сиськин",ordersPc:[0,0,0],ordersRub:[0,0,0],salesPc:[0,0,0],salesRub:[0,0,0],advertPc:[0,0,0],advertRub:[0,0,0]}};
var range = sheet.getRange(firstRow,1,lastRows,1).getValues(); // Поучаю колонку с датами
if(Utilities.formatDate(new Date(range[i][0]), "GMT+3", 'yyyy-MM-dd') == varDate){ // Проверяем дату
indexRow.push(i+1) // Собираем индексы строк с нужной датой в массив
}
for (var i=0; i<indexRow.length; i++) { // Обходим все собраные индексы строк
var range = sheet.getRange(indexRow[i],41,1,1).getValues(); // получаем строку со всеми столбцами по индексу
for(var keyBis in busines){ // Перебираю ключи массива
// Раскладываю значения по массиву
if(range[0][0]=='Футболки'){
busines[keyBis].ordersPc[0] = busines[keyBis].ordersPc[0] + rangeCol[0][0]; // Складываем штуки Футболок
busines[keyBis].ordersRub[0] = busines[keyBis].ordersRub[0] + rangeRub[0][0]; // Складываем рубли Футболок
}else if (range[0][4]=='Кружки'){
busines[keyBis].ordersPc[1] = busines[keyBis].ordersPc[1] + range[0][10]; // Складываем штуки Кружек
busines[keyBis].ordersRub[1] = busines[keyBis].ordersRub[1] + range[0][22]; // Складываем рубли Кружек
} else {
busines[keyBis].ordersPc[2] = busines[keyBis].ordersPc[2] + range[0][10]; // Складываем штуки Остальное
busines[keyBis].ordersRub[2] = busines[keyBis].ordersRub[2] + range[0][22]; // Складываем рубли Остальное
}
}
}
我试图不获取整行,而只获取所需的单元格。原来更长
var range = sheet.getRange(`AO${indexRow[i]}`).getValues(); // Название Юр.Лица
var rangeCol = sheet.getRange(`K${indexRow[i]}`).getValues(); // Кол-во
var rangeRub = sheet.getRange(`W${indexRow[i]}`).getValues(); // Сумма
事实上,我需要获取 1-2000 行并进一步处理它们/有人可以告诉我如何正确获取这么多行的样本吗?这可能吗?
在 Google 脚本中使用 JS 处理大量数据并不是一项非常有价值的工作,由于某种原因,这需要花费大量的时间和资源。
在我的实践中,我还处理过处理大约 700,000 行的需要。
我在类过滤器的帮助下部分解决了这个问题,该过滤器存在于 Range 和 ActiveSheet 类型的每个类中。
显然,它使用了一些内部的Google算法(例如没有任何不必要的检查、保护和对所使用资源的计算)因此,它相当快地处理大量行并生成一个包含已经必要的行的范围,这些行已经可以由JS处理,取决于任务