我有一个谷歌表格,其中包含所有员工的项目清单。我从MySQL表填充此列表。每次打开谷歌表单时,我都会尝试使用更新的员工列表刷新表单。我有一个打开事件触发器,但由于某种原因列表没有更新。请告诉我。
function onOpen(){
var form = FormApp.openById('239jelkwpeowppd-3843ikeifd89wered');
var conn = mySQL();
var itemList = getEmpList(conn);
var item = form.getTitle('Approver:');
item.setChoiceValues(itemList);
}
function getEmpList(conn){
var sql = conn.createStatement();
var ds = sql.executeQuery('SELECT empNAME FROM emp');
var columns = ds.getMetaData().getColumnCount();
var list=[];
while (ds.next()) {
var rowString = '';
for (var col = 0; col < columns; col++) {
rowString += ds.getString(col + 1) + '\t';
list.push(rowString);
}
}
return list;
}
function mySQL(){
var dbConn = Jdbc.getConnection("jdbc:mysql://dbURL","user","password");
return dbConn;
}
答案 0 :(得分:1)
当在编辑模式下打开表单时,而不是在视图(响应提交)模式下打开表单时,并且仅当用户有权编辑表单时,才会发生打开事件。
在以下引用中,重点是我的:
来自https://developers.google.com/apps-script/guides/triggers/
当用户打开电子表格,文档或表单他或她有权编辑时,
onOpen(e)
就会运行。
来自https://developers.google.com/apps-script/guides/triggers/installable
可安装触发器始终在创建它们的人的帐户下运行。例如,如果您创建一个可安装的打开触发器,它将在您的同事打开文档时运行(,如果您的同事具有编辑权限),但它将作为您的帐户运行。