Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS-对象到数组到Google Sheets batchUpdate_Javascript_Arrays_Google Sheets_Javascript Objects_Google Sheets Api - Fatal编程技术网

Javascript JS-对象到数组到Google Sheets batchUpdate

Javascript JS-对象到数组到Google Sheets batchUpdate,javascript,arrays,google-sheets,javascript-objects,google-sheets-api,Javascript,Arrays,Google Sheets,Javascript Objects,Google Sheets Api,我已经花了几天的时间在这方面,似乎正在取得进展,但我无法找出错误。目标:从本地服务器查询,将结果存储到一个数组中,该数组可以发送到GoogleSheets batchUpdate的values属性 我在整个异步过程中度过了一段非常痛苦的时光,但我想我现在已经掌握了承诺,而且它有点起作用了 到目前为止,我的代码如下所示: function begin(auth) { var theArray = []; let getResults = (passedQuery) => { re

我已经花了几天的时间在这方面,似乎正在取得进展,但我无法找出错误。目标:从本地服务器查询,将结果存储到一个数组中,该数组可以发送到GoogleSheets batchUpdate的values属性

我在整个异步过程中度过了一段非常痛苦的时光,但我想我现在已经掌握了承诺,而且它有点起作用了

到目前为止,我的代码如下所示:

function begin(auth) {

var theArray = [];

let getResults = (passedQuery) => {
    return new Promise((resolve, reject) => {
        client.connect();
        var sql = client.query(passedQuery);

        sql.on('row', (row, result) => {
            result.addRow(row);
        });

        sql.on('end', (result) => {
            resolve(result.rows); // Array.from(result.rows)??
            client.end();
        });

    });
}

// may not even need this...    
let convertArray = (sqlObj) => {
    return new Promise((resolve, reject) => {

        theArray = Object.keys(sqlObj).map((k) => {
            return [sqlObj[k]];
        });

        console.log(theArray);

        // sqlObj.forEach((element) => {
        //     theArray.push(element);
        // })

        // theArray = sqlObj.reduce((result, item) => {
        //     var key = Object.keys(item)[0]; // first property
        //     result[key] = item[key];
        //     return result;
        // }, []);

        // console.log(theArray);            
        resolve(theArray);

        // while (sqlObj.length) {
        //     theArray.push(sqlObj.splice(0, sqlObj.length));
        //     console.log(sqlObj.length);
        // }            
        // console.log('convertArray should be done and now includes: \n'+JSON.stringify(theArray));

        // resolve(theArray);
    });
}

let updateSheets = (myArray) => {
    return new Promise((resolve, reject) => {

        var update_range = "Sheet1!A:Z";
        var valueInputOption = "RAW";
        var sheets = google.sheets('v4');

        var options = {
            auth: auth,
            spreadsheetId: spreadsheetId,
            resource: {
                valueInputOption: valueInputOption,
                data: [
                    {
                        range: update_range,
                        majorDimension: "COLUMNS",
                        // values: [[JSON.stringify(myArray,null,' ')]] // stringify and it works...in 1 cell...
                        values: myArray // this should be values only! NO KEYS / COLUMN HEADERS
                    }
                ]
            }
        }

        sheets.spreadsheets.values.batchUpdate(options, (err, res) => {
            if (err) {
                reject(err);
            } else {
                console.log(res);
                resolve(res);
            }
        });
    });
}

getResults('SELECT item_number,item_descrip1 FROM item WHERE item_number LIKE \'23-%\' LIMIT 10')
    .then((sqlObj) => {
        console.log('Converting object to array...hopefully...');
        return convertArray(sqlObj);
    })
    .then((convertedObj) => {
        console.log('Updating sheets...');


           return updateSheets(convertedObj);
        })
        .catch((error) => {
            console.log('Something went wrong...\n%s', error);
        })
}
从我的注释中可以看出,我一直在尝试各种方法,根据查询返回的列数将对象放入[x]D数组

事实上,我的结果

    Info: Start process (1:30:25 PM)
Converting object to array...hopefully...
[ [ anonymous {
      item_number: '23-1240',
      item_descrip1: 'Dev1 TX SDI with Lemo' } ],
  [ anonymous {
      item_number: '23-1241',
      item_descrip1: 'Dev1 RX SDI with Lemo' } ],
  [ anonymous { item_number: '23-0042-B', item_descrip1: 'Dev2 Assy' } ],
  [ anonymous { item_number: '23-0036-B', item_descrip1: 'Dev3 Assy' } ],
  [ anonymous { item_number: '23-0026-B', item_descrip1: 'Dev4 Ship Kit' } ],
  [ anonymous {
      item_number: '23-0055',
      item_descrip1: 'Dev5 TX SDI Unicast Assy' } ],
  [ anonymous { item_number: '23-0118', item_descrip1: 'Dev6 AB Mount' } ],
  [ anonymous { item_number: '23-0119', item_descrip1: 'Dev7 V Mount' } ],
  [ anonymous {
      item_number: '23-0203',
      item_descrip1: 'Dev8 RX HDMI' } ],
  [ anonymous {
      item_number: '23-0206',
      item_descrip1: 'Dev9 TX HDMI' } ] ]
Updating sheets...
Something went wrong...
Error: Invalid data[0]: Invalid values[0][0]: struct_value {
  fields {
    key: "item_number"
    value {
      string_value: "23-1240"
    }
  }
  fields {
    key: "item_descrip1"
    value {
      string_value: "Dev1 TX SDI with Lemo"
    }
  }
}

Info: End process (1:30:26 PM)

我很有信心,batchUpdate调用无法理解数组中的“键”,但我的尝试正在删除,这仍然会给我类似的结果。

一位同事能够为我提供答案。我正在分享为我的子孙后代制作这个功能的结果

    let convertArray = (sqlObj) => {
    return new Promise((resolve, reject) => {

        var result = [];

        if (sqlObj.length > 0) {
            var order = Object.keys(sqlObj[0]).map(function (k) {
                return k;
            });
            console.log(order);
            var result = [];
            for (var i = 0; i < sqlObj.length; ++i) {
                result.push(order.map(function (k) {
                    return sqlObj[i][k];
                }));
            }
        }
        console.log(result);

        resolve(result);
    });
}