Google appscript onEdit trigger中禁用jdbc、email等服务的解决方法
google办公套件的强大之处就在于我们可以利用google自己的app script来给我们的表格、文档、表单增强功能,比如表格更新时发送邮件提醒、表格数据与我们自己的数据库同步等等,app script本身是基于java的,同时揉入了一些JavaScript的语法,编写起来也是很方便的。
今天在实现一个当编辑了spreadsheet之后,自动将更新后的单元格数据同步到远程的一张mysql表时 出现了问题。很简单的函数
[cc lang=”javascript”]
function onEdit(e){
var range = e.range;
var rowNum = range.getRow();
var colNum = range.getColumn();
var id = range.offset(0,0-colNum+1).getValue();
….
if(id){
Logger.log(“will do update:%s”,id);
}else{
Logger.log(“will do insert”);
}
}
}
function getConnection(){
return Jdbc.getConnection(dbUrl, user, userPwd);
}
function updateOne(newRecord, id){
var conn = getConnection();
try{
var stmt = conn.prepareStatement(“replace into samplestockupdated values (?,?,?,?)”);
stmt.setInt(1,id);
stmt.setString(2,newRecord[‘Description’]);
stmt.setInt(3,newRecord[‘StockHolding’]);
stmt.setInt(4,newRecord[‘ItemValue’]);
stmt.executeUpdate();
}catch(e){
Logger.log(e);
}finally{
closeConnection(conn);
}
}
[/cc]
但是调试的时候 stackdriver错误报告提示 “您没有调用 getConnection 的权限”
查看了google的文档才发现 原来onEdit函数属于simple trigger, 在修改单元格的时候会自动调用,simple trigger中不能使用jdbc 还有其他的一些较为高级的api
解决的方法其实很简单 只需要把onEdit改成另外一个函数名 比如我改成了onEditTrigger 然后手动添加一个高级触发器就可以了 如下图

google sheets如何添加触发器
汤不热吧