使用Nodejs通过Google Sheets API操作电子表格

请进行下列英文短语的中文释义,只需一种选项:

要旨

即使不使用Google Apps Script,也可以操作电子表格。

如果根据标题设置列的值,则使用GAS更容易(必须在第一行上有标题,不能使用大写英文字母或下划线的字符串作为标题指定)。

不需要在意6分的壁,这样很轻松。

尽管我觉得比GAS更稳定,但仍然感到有一些不稳定。

有多个用于在Node.js中使用Google Sheets API的包,但都存在一些小错误
(我们在这次使用的包中,批量更新单元格的bulkUpdateCells功能无法正常工作)

使用套餐

谷歌电子表格(版本2.0.6)
https://www.npmjs.com/package/google-spreadsheet

样品表

谷歌表格API Qiita说明样本
https://docs.google.com/spreadsheets/d/1pNmXvx5vL2pEICe6_2PVFfuQ2WYoRaVA7K05i9s8-Aw/edit?usp=sharing

注意事项

请根据此文章获取API认证信息的JSON(非常感谢您的参考和帮助,借此机会向您表示感谢)。
https://qiita.com/howdy39/items/ca719537bba676dce1cf

代码 (má duó)

async function sample() {
    try {
        const GoogleSpreadsheet = require('google-spreadsheet');
        const creds = require('./google-generated-creds.json'); //API認証情報JSONを同ディレクトリに置いておく

        var spreadsheet_id = '1pNmXvx5vL2pEICe6_2PVFfuQ2WYoRaVA7K05i9s8-Aw'; //スプレッドシートのID
        var worksheet_name = "シート2"; //操作したいワークシートのシート名

        var book = new GoogleSpreadsheet(spreadsheet_id); //インスタンス
        var spreadsheet; //スプレッドシート
        var worksheet; //ワークシート
        var rcnt1; //ループカウンタ1
        var rcnt2; //ループカウンタ2

        //認証を通しスプレッドシートの情報取得して外部スコープの変数に保存
        book.useServiceAccountAuth(creds, function(error) {
            if (error !== null) {
                throw new Error(error);
            }
            book.getInfo(function(error, data) {
                if (error !== null) {
                    throw new Error(error);
                }
                spreadsheet = data;
            });
        });

        //指定した名前のスプレッドシートの値を更新する
        for (rcnt1 in spreadsheet.worksheets) {
            if (spreadsheet.worksheets[rcnt1].title === worksheet_name) {
                spreadsheet.worksheets[rcnt1].getRows({
                    offset: 1, //何も指定しなければ2行目から読み込むので1を指定すると3行目から読み込む
                    limit: 20, //途中で空白行が現れれば20行以下でも読み込み中止
                }, function(error, rows) {
                    if (error !== null) {
                        throw new Error(error);
                    } else {
                        for (rcnt2 in rows) {
                            rows[rcnt2].sku = "new_sku"; //1行目の値が"sku"の列の(rcnt2 + 1 + offset)行目の値を"new_sku"に変更
                            rows[rcnt2].price = 19800;
                            rows[rcnt2].save();
                        }
                    }
                });
            }
        }

        return Promise.resolve(0);
    } catch(error) {
        console.error(error);
        return Promise.reject(1);
    }
}


广告
将在 10 秒后关闭
bannerAds