google-apps-script - 如果单元格不为空,则将公式值转换为静态值
问题描述
我正在使用一个脚本来计算位置之间的英里数。例如,A 列 San Diego, CA 列 B 列 San Francisco 列 C 508.3。如果 A 列或 B 列是 === "",则它将列设置为 ""。
// Note: This is not my code.
function DrivingMeters(origin, destination) {
var directions = Maps.newDirectionFinder()
.setOrigin(origin)
.setDestination(destination)
.getDirections();
return directions.routes[0].legs[0].distance.value;
}
function DrivingMiles(origin, destination) {
if (origin === "" || destination === "") {
return "";
} else {
return DrivingMeters(origin, destination)/1609.34;
}
}
我试图限制我进行的 API 调用的数量,因为我有很多定期添加的信息。如果任一列为空白,我采取的第一步是在 API 调用之前返回“”。我还想做的是将C列中的单元格转换为 !== "" 为静态值,将公式全部删除。提前致谢!
解决方案
- 作为测试用例,您将自定义公式放入“C1”列,如
=DrivingMiles(A1,B1)
. - 当“C”列的值不为空时,您希望将公式转换为静态值。
- 您想使用 Google Apps 脚本实现此目的。
从您的回复评论中,我可以像上面那样理解。如果我的理解是正确的,这个答案怎么样?我认为您的情况有几个答案。所以请认为这只是其中之一。
模式一:
在这个模式中,当放自定义公式时=DrivingMiles()
,当返回值不为空时,公式转换为值。
对于这种情况,我使用了简单触发器的 OnEdit 事件触发器。当您使用此脚本时,请复制并粘贴以下脚本,并将自定义公式如=DrivingMiles(A1,B1)
. 返回值不为空时,公式自动转换为静态值。
示例脚本:
function onEdit(e) {
var value = e.range.getValue();
if (e.range.getColumn() === 3 && ~e.range.getFormula().toUpperCase().indexOf("=DRIVINGMILES(") && value) {
e.range.setValue(value);
}
}
- 如果要为特定工作表运行 OnEdit 事件触发器,请修改上述脚本。
模式二:
在此模式中,当运行以下脚本时,当单元格具有值和公式或只有值时,“C”列的单元格将从公式转换为值。
示例脚本:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1, 3, sheet.getLastRow(), 1); // Column "C"
var values = range.getValues();
var formulas = range.getFormulas();
var convertedValues = values.map(function(e, i) {return e[0] && formulas[i][0] || e[0] ? [e[0]] : [formulas[i][0]]});
range.setValues(convertedValues);
}
- 这可用于活动工作表。
参考:
推荐阅读
- python-packaging - 诗歌:如何发布针对多个 Python 版本的项目包?
- docker - Docker 容器无法连接到我知道正在运行的另一个容器
- android - 如何将空图像添加到 RecyclerView
- amazon-web-services - 如何拒绝对 AWS API 网关的公开访问?
- c++ - 调用和初始化类的静态成员函数
- python - python asyncio gRPC 客户端的多线程支持
- vue.js - Vuex 存储更新但 DOM 没有
- anylogic - Anylogic:有没有办法将代理从托盘架直接移动到另一个架子上
- matlab - 将字符串转换为特定格式的数组
- free-jqgrid - 使用 jqGrid 我需要显示一个基于 UserData Parm 的隐藏列