google-apps-script - 使用脚本在不破坏 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()
,我正在努力很好地解决这个问题。我的方法的主要原因是让脚本快速运行,因为工作表中有很多数据。
即我只修改了一些数据,但希望保留公式。
解决方案
这个改装怎么样?
修改点:
- 在您的情况下,首先
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);
参考:
如果我误解了你的问题,请告诉我。我想修改它。
推荐阅读
- php - 如何使脚本无限期地每 3 秒执行一次 sql 查询 UBUNTU 18.04
- javascript - 否则角度路由
- java - 如何在 SQLite 中插入带外键的值?
- docker - 我正在尝试使用自由式项目为 laravel hello-world 项目设置 jenkins-docker-gitlab 管道
- spring - Http 状态 404:Servlet ViewResolver
- spring - KafkaListner 没有解析主题名称
- android - 在 Android Kotlin App Dev 中,Firebase 说电子邮件地址格式错误
- java - 监控 jms 消息的工具
- java - 在java中读取和格式化数据
- laravel - 得到一个“请确保 PHP Redis 扩展已安装并启用。” 尽管加载了扩展程序,但仍出现错误