Google apps script 使用脚本获取、修改、设置值而不破坏Google工作表中的公式

Google apps script 使用脚本获取、修改、设置值而不破坏Google工作表中的公式,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我喜欢使用脚本读取Google sheet中的一系列数据,修改数据,然后写回 var range = sheet.getDataRange(); var values = range.getValues(); // modify the values range.setValues(values); 到目前为止还不错,但我的工作表还包含公式,这些公式现在已替换为固定值,因此修改了我的代码: var range = sheet.getDataRange(); var values = range

我喜欢使用脚本读取Google sheet中的一系列数据,修改数据,然后写回

var range = sheet.getDataRange();
var values = range.getValues();
// modify the values
range.setValues(values);
到目前为止还不错,但我的工作表还包含公式,这些公式现在已替换为固定值,因此修改了我的代码:

var range = sheet.getDataRange();
var values = range.getValues();
var formulas = range.getFormulas();
// modify the values
range.setValues(values);
range.setFormulas(formulas);
但是现在我所有的数据都在
setFormulas()
上被清除了,我正在努力很好地解决这个问题。我采用这种方法的主要原因是让脚本快速运行,因为工作表中有大量数据


也就是说,我只修改了一些数据,但希望保留公式。

这次修改怎么样

修改点:
  • 在您的情况下,首先运行
    range.setValues(values)
    。这些值被放入单元格中。然后,当运行
    range.setFormulas(formulas)
    时,
    formulas
    数组中的值也不会放入单元格中。这样,具有值的单元格将被清除。
    • 为了避免这种情况,作为一种方法,它创建了一个组合了
      公式
      的数组。它将数组放入单元格中
当上述要点反映到脚本中时,它将变成如下所示。我认为有几种方法可以解决你的情况。所以,请把这看作是其中之一

修改脚本: 请修改如下

发件人: 致: 参考:

如果我误解了你的问题,请告诉我。我想修改它。

效果很好!
range.setValues(values);
range.setFormulas(formulas);
var data = values.map(function(row, i) {
  return row.map(function(col, j) {
    return formulas[i][j] || col;
  });
});
range.setValues(data);