如何使用Google工作表脚本有效地将一系列值和公式从一列移动到另一列?

时间:2016-01-06 17:12:22

标签: google-apps-script google-sheets

我正在尝试将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]);  
    }
  }

因为它运行得如此缓慢,我觉得我错过了一些东西。

有没有办法让它更高效,运行更快?

1 个答案:

答案 0 :(得分:0)

试试这个:

k

此代码与您使用的代码非常不同。它首先设置所有公式。这消除了编写每个单元的需要。您仍然需要将值写入公式之间的单个单元格,并在最后完成。此示例一次写入所有公式,然后逐个写入值。但你可以用相反的方式做到这一点。例如,如果值多于公式,则可能会节省几毫秒。

此策略还消除了合并数据的需要,这可能需要花费大量时间。