我是编程世界的初学者,我创建了一个脚本来浏览table1并带来 table2 中的值根据其中告知的期限。
该脚本可以正常工作,因为它在运行时非常慢。我需要一些帮助来尝试让他更快。
我搜索了数组,但我不明白我可以做什么来应用这个函数。
function teste() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Página6");
var tabela = ss.getRange(3, 9, ss.getLastRow(), 1).getValues();
for(var l1 = 3 ; l1 <= tabela.length ; l1 ++ ){
var tab1 = ss.getRange(l1,8).getValue();
for( var l2 = 3 ; l2 <= tabela.length ; l2 ++ ){
var tab2 = ss.getRange(l2,12).getValue();
if (tab1 == tab2){
for( var col = 13 ; col < 17 ; col ++){
var coluna = ss.getRange(2, col).getValue();
if( ss.getRange(l1, 9).getValue() == ss.getRange(2, col).getValue()){
ss.getRange(l2, col).setValue(ss.getRange(l1, 10).getValue());
}
}
}
}
}
}
最佳答案
- 您想要将表格转换为下图所示。您想要将左表转换为右表。
- 从
Mês 1
到Mês 4
的每个Produto
编号都是相同的。 Mês
的数量已排序。- 左表和右表的位置在您的示例中是固定的。
- 左表为
H2:J38
。 - 右表为
L2:P11
。
- 左表为
- 您希望通过修改来加速脚本。
我可以像上面那样理解。如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。
修改点:
- 在您的脚本中,重要的一点是准备好要放入工作表的值,然后使用
setValues()
将准备好的值放入工作表。 - 在此修改中,还准备了
getValues()
检索到的值,并使用setValues()
将其放入工作表中。
修改后的脚本:
function teste() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Página6");
var values = ss.getRange(3, 8, ss.getLastRow() - 2, 5).getValues();
// Value are parsed and put them to an object.
var obj = values.reduce(function(o, e) {
if (o[e[0]]) {
o[e[0]][e[1]] = e[2];
} else {
o[e[0]] = {};
o[e[0]][e[1]] = e[2];
}
return o;
}, {});
// Create an array for putting values to sheet.
var ar = values.filter(function(e) {return e[4]}).map(function(e) {return Object.keys(obj[e[4]]).map(function(f) {return obj[e[4]][f]})});
// Put the values.
ss.getRange(3, 13, ar.length, ar[0].length).setValues(ar);
}
引用文献:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
关于javascript - 如何加快 Google Apps 脚本运行速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096865/