我正在使用一个脚本来计算位置之间的里程。例如,在圣地亚哥的A列,加利福尼亚的B列,加利福尼亚的C列,列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列中!==“”的单元格转换为静态值,从而将公式全部删除。预先感谢!
答案 0 :(得分:2)
=DrivingMiles(A1,B1)
。
从您的回复评论中,我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?我认为您的情况有几个答案。因此,请仅考虑其中之一。
在这种模式下,当放置自定义公式=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);
}
}
在这种模式下,当运行以下脚本时,如果“ 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);
}