我正在尝试将D列的内容移动到A列,并将它们保存为公式或值。下面的代码有效,但需要FOREVER !!
我使用这个答案将值和公式放入数组中: How do I copy a row with both values and formulas to an array?
我使用这个建议根据他们的类型将它们分开: https://productforums.google.com/forum/#!topic/docs/JtcH-U3qC7s
var ss = SpreadsheetApp.getActiveSheet();
var formulas = ss.getRange("D2:D").getFormulas();
var values = ss.getRange("D2:D").getValues();
var merge = new Array(formulas.length);
for( var i in formulas ) {
merge[i] = new Array(formulas[i].length);
for( var j in formulas[i] )
merge[i][j] = formulas[i][j] !== '' ? formulas[i][j] : values[i][j];
}
for (k=0;k<merge.length;k++){
var rowRange = ss.getRange("A2");
var str = merge[k].toString();
var formulaChecker = str.substring(0,1);
if (formulaChecker == "="){
rowRange.offset(k, 0).setFormula(merge[k]);
}else{
rowRange.offset(k, 0).setValue(merge[k]);
}
}
因为它运行得如此缓慢,我觉得我错过了一些东西。
有没有办法让它更高效,运行更快?
答案 0 :(得分:0)
试试这个:
k
此代码与您使用的代码非常不同。它首先设置所有公式。这消除了编写每个单元的需要。您仍然需要将值写入公式之间的单个单元格,并在最后完成。此示例一次写入所有公式,然后逐个写入值。但你可以用相反的方式做到这一点。例如,如果值多于公式,则可能会节省几毫秒。
此策略还消除了合并数据的需要,这可能需要花费大量时间。