首页 > 解决方案 > 使用脚本在不破坏 Google 表格中的公式的情况下获取、修改、设置值

问题描述

我喜欢使用脚本读取 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(),我正在努力很好地解决这个问题。我的方法的主要原因是让脚本快速运行,因为工作表中有很多数据。

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

标签: google-apps-scriptgoogle-sheets

解决方案


这个改装怎么样?

修改点:

  • 在您的情况下,首先range.setValues(values)是运行。这些值放在单元格中。然后,当range.setFormulas(formulas)运行时,数组中的任何值formulas也不会放入单元格中。这样,具有值的单元格将被清除。
    • 为了避免这种情况,作为一种方法,它创建了一个组合values和的数组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);

参考:

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


推荐阅读