我有一个复杂的工作表,其中包含许多公式和单元格值,它们根据特定单元格中的某些给定值来计算结果。
基本上,我想将此工作表用作功能:基于Web服务的计算器,该计算器接受参数(来自其他Web应用程序)并吐出一些json结果。
现在,最后一部分(返回数据)由Google脚本doGet
函数处理,例如ContentService.createTextOutput(JSON.stringify(output))
。
我想知道的是:我应该如何在表单中输入输入参数?
我希望这个“计算器”一次被多个用户使用(可能),所以我想我无法更新工作表中的单元格以获取计算值,否则我会遇到诸如写冲突等问题?
Google表格中是否存在类似于虚拟单元格的内容?还有其他方法可以做到这一点吗?
答案 0 :(得分:0)
不建议将公式与脚本结合使用,因为这样做效率低下且容易出错。但是,如果没有其他选择,可以尝试以下方法。
LockService
用于防止冲突flush()
用于防止缓存/**
* Retrieves value in a spreadsheet based on inputs provided
* @param {Number} a1 - A number to input in a1 of sheet1
* @param {Number} b1 - A number to input in b1 of sheet1
* @return {Number} c1 - The value in c1, which was modified by formulas? due to a1 and b1 inputs
*/
function blackBox_(a1,b1) {
try{
LockService.getScriptLock().waitLock(2000);//Wait to get lock for 2s(Unreliable?)
const ss = SpreadsheetApp.getActive();
ss.getRange("Sheet1!A1:B1").setValues([[a1,b1]]);
SpreadsheetApp.flush(); //flush the changes
return ss.getRange("Sheet1!C1").getValue();
} catch(e) {
return e;
}
}
function doGet(e){
//e=e || {};
const par = e.parameter || {};
const a1 = par.a1 || 2;
const b1 = par.b1 || 2;
console.log(blackBox_(a1,b1))
}