将电子表格值返回给javascript

时间:2016-07-27 15:33:23

标签: javascript json google-apps-script google-sheets

我对谷歌脚本和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(我认为)之前正在工作

因为我坚持这个。我会感激任何帮助。

由于

1 个答案:

答案 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);
};