【发布时间】:2016-10-30 22:49:48
【问题描述】:
我有一个包含几张工作表的电子表格,我想获取一个数据范围,对其进行过滤并将过滤后的数据的值设置到另一张工作表中。 我可以使用 .getvalues 并循环遍历该数组中的所有值,将我需要的值推送到新数组和 .setvalue(逐行)到新工作表。 我真正想要的是使用批处理.setvalues 来加快速度。 问题是当我将值推送到我的第二个数组时,我最终得到一个 3D 数组,而 .setvalues 只接受 2D 数组。 我一直在搜索并发现了类似的问题(here、here),但还没有解决我的问题。 我需要一个比逐行循环设置值更快的解决方案。
我的代码如下所示:
var shSales=ss.getSheetByName('Relação de Vendas'), lrowSales=shSales.getLastRow();
var shArchive=ss.getSheetByName('Hx Faturação')
var shSalesData=shSales.getRange(7,1,lrowSales-6,15).getValues();
var InvoicedSales=[];
var deleted=0;
for (var i in shSalesData) {
if (shSalesData[i][12]!=[] && shSalesData[i][13]!=[] && shSalesData[i][14]!=[]) {
InvoicedSales[i]=[];
InvoicedSales[i].push(shSalesData[i]);
shSales.deleteRow((parseInt(i)+7)-deleted);
deleted++;
}
}
var lrowArchive=shArchive.getLastRow();
var range=shArchive.getRange(lrowArchive+1, 1, 2, 15);
range.setValues(InvoicedSales);
SpreadsheetApp.flush();
你能帮我解决这个问题吗?
【问题讨论】:
-
请添加示例输入数据和minimal reproducible example。
-
InvoicedSales.push(shSalesData[i]);? -
@RobinGertenbach 你的评论出现在我写答案的时候。在最短的时间内,你是对的。至于 OP,我的回答也解释了你在哪里以及为什么会遇到这个问题。不过,我会投票赞成该评论!
-
@RobinGertenbach 感谢您的回答,因为 Vytautas 也提出了解决方案,但由于我是 javascript 新手,在阅读 Vytautas 评论之前我不明白。
-
作为活跃用户,我也是 SO 新手。谁能解释一下为什么对这个问题投反对票?
标签: arrays google-apps-script google-sheets