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

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

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

最佳答案

这个 retrofit 怎么样?

retrofit 要点:

  • 在你的情况下,起初,range.setValues(values)正在运行。值放在单元格中。然后,当 range.setFormulas(formulas)运行时,formulas 的数组中没有值也被放入细胞中。这样,具有值的单元格被清除。
  • 为了避免这种情况,作为一种方法,它创建了一个组合 values 的数组。和 formulas .并将数组放入单元格中。

  • 当以上几点反射(reflect)到你的脚本中时,它变成如下。我认为针对您的情况有几种解决方案。因此,请将此视为其中之一。

    修改后的脚本:

    请修改如下。

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

    引用:
  • map()

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

    关于google-apps-script - 使用脚本获取、修改、设置值而不破坏 Google 表格中的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775597/

    相关文章:

    google-apps-script - 在应用程序脚本中获取谷歌表格的最新更新

    javascript - 使用 MailApp.sendEmail 时发生服务器错误

    javascript - RESTful API 可以工作,但无法正确渲染 UI(MDC + Sheetsu)

    javascript - 将列索引转换为对应的列字母

    javascript - 将 Google 云端硬盘中的图片添加到 html 电子邮件正文

    javascript - 在范围上应用 If/Then (google-apps-script)

    google-apps-script - Google 脚本给出 "Unexpected Error",没有其他信息

    javascript - 如何修复 "Service invoked too many times in a short time: exec qps."

    google-sheets - Google Data Studio - 分隔字符串中的值

    javascript - 将工作表之间的数据复制到特定行