我对谷歌脚本和JavaScript的问题非常恼火。 我有问题从我的google脚本发送数据范围值以供我的javascript函数处理。
这是我的代码。
code.gs extract:
function getSheetData(ss,sh){
// Create sheet object
var ass = SpreadsheetApp.openById(ss);
SpreadsheetApp.setActiveSpreadsheet(ass);
var ash = SpreadsheetApp.openById(ss).getSheetByName(sh);
ash = SpreadsheetApp.getActive();
var result = ash.getDataRange().getValues();
Logger.log("getSheetData(ss,sh) result : "+result);
// return result after JSON strinfigy
return JSON.stringify(result);
}
JavaScript.html提取:
function readTb(fn) {
var result = google.script.run.getSheetData(bdData, tbData);
console.dir('readTb result : ' + result);
fn(result);
}
function buildSelect(range) {
console.log('Range = ');
console.dir(range);
if (range.length > 0) {
buildOption('', 'Choose an order');
for (i = 0; i < range.length; i++) {
var row = range[i];
buildOption(row[0], row[0] + " ~ " + row[2] + " ~ " + row[5]
+ " ~ " + row[7]);
}
} else {
buildOption('', 'No order to display');
}
}
function buildOption(data) {
console.log(data);
}
/**
/* Retrieve orders and format to fill select numCommande input
/*
*/
function listCommandesPesee() {
console.log('Call for orders seeking');
// Read DB and retrieve data
// feed function variables with CONST
bdData = BDDATA_OLD;
tbData = TBCOMMANDES;
// Call readTb to retrieve data, then buildSelect to format result
var promise1 = new Promise(readTb);
promise1.then(buildSelect);
console.dir(promise1);
}
到目前为止,GS IDE中的Logger.log显示正确的数据:
[16-07-27 08:01:22:040 PDT] résultat de getSheetData(ss,sh) : Ligne,ID,Produit,Date,Fournisseur,Numéro Camion,Silo,Cellule,Ilot,Poids coop,Poids net livré,N° analyse qualité,Cellule destination ,Transport ...
在页面加载时,调用listCommandesPesee,调用readTb()。
但即使使用json stringify,我仍然在var result(readTb函数)中有一个未定义的值,因此buildSelect中的范围不具有任何长度属性。
JSON.Stringify在我测试时以及在我添加promise和chain(我认为)之前正在工作
因为我坚持这个。我会感激任何帮助。
由于
答案 0 :(得分:1)
使用google.script.run
的同一函数无法接收服务器的返回。
function readTb(fn) {
var result = google.script.run.getSheetData(bdData, tbData);
console.dir('Résultat de lecture des données : ' + result);
fn(result);
}
function readTb() {
var result = google.script.run
.withSuccessHandler(mySuccessFnc)
.getSheetData(bdData, tbData);
}
function mySuccessFnc(resultReturned) {
console.dir('Résultat de lecture des données : ' + resultReturned);
};