使用脚本获取,修改,设置值而不会破坏Google表格中的公式

时间:2019-02-19 21:59:32

标签: google-apps-script google-sheets

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

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()上清除了,我正在努力很好地解决此问题。我采用这种方法的主要原因是要使脚本快速运行,因为工作表中有很多数据。

即我只修改了一些数据,但希望保留公式。

1 个答案:

答案 0 :(得分:1)

此修改如何?

修改点:

  • 根据您的情况,首先运行range.setValues(values)。将值放入单元格中。然后,运行range.setFormulas(formulas)时,formulas数组中的任何值也不会放入单元格中。这样,将清除具有值的单元格。
    • 为了避免这种情况,作为一种方法,它创建了一个结合了valuesformulas的数组。然后将数组放入单元格。

当以上几点反映到您的脚本中时,它将变为以下内容。我认为针对您的情况有几种解决方案。因此,请仅考虑其中之一。

修改后的脚本:

请进行如下修改。

从:
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);

参考:

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