NodeJS 我可以使用googleapis npm包查询googleSheet吗?

8ljdwjyq  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(158)

我有一个有数千行的工作表,我试图查询它,而不是每次都获取所有内容。我看了一下Query语言,但它似乎不适合我的情况。
我正在使用服务帐户进行身份验证:

const auth = new google.auth.GoogleAuth({
credentials: googleCredentials,
scopes: "https://www.googleapis.com/auth/spreadsheets",
});

使用batchGet一次获取多个选项卡。

const standardSpreadsheetData = await sheets.spreadsheets.values.batchGet({
auth,
spreadsheetId: regularSpreadsheetId,
ranges: regularRanges,
});

但我似乎不知道在哪里可以添加查询。
我想问的是这样的:

select * where B = ''9831"

知道去哪找吗

ws51t4hk

ws51t4hk1#

我相信你的目标如下。

  • 您希望通过类似select * where B = ''9831"的查询检索行值。
  • 您希望使用googleapis for Node.js的服务帐户来实现这一点。

修改要点:

  • 我猜你对select * where B = ''9831"的查询可能是select * where B = '9831'
  • 不幸的是,在当前阶段,像select * where B = '9831'这样的查询不能与Sheets API一起使用。在这种情况下,需要使用访问令牌将端点用于查询语言。Ref

当这些点反映在示例脚本中时,下面的示例脚本如何?

示例脚本:

const { google } = require("googleapis");
const request = require("request");

// Please use your script here.
const auth = new google.auth.GoogleAuth({
  credentials: googleCredentials,
  scopes: "https://www.googleapis.com/auth/spreadsheets",
});

const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetId = "###"; // Please set the search text. In your case, it's ID.
const query = "select * where B='9831'"; // This is the query for searching.

auth
  .getAccessToken()
  .then((accessToken) => {
    const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/gviz/tq?tqx=out:csv&gid=${sheetId}&tq=${encodeURIComponent(query)}`;
    request(
      {
        url,
        method: "GET",
        headers: { authorization: `Bearer ${accessToken}` },
      },
      (err, res, result) => {
        if (err) {
          console.log(err);
          return;
        }
        if (result != "") {
          const [, ...res] = result.split("\n").map((e) =>
            e.split(",").map((f) => {
              const t = f.replace(/"/g, "");
              return isNaN(t) ? t : Number(t);
            })
          );
          console.log(res);
        }
      }
    );
  })
  .catch((err) => console.log(err));
  • 从服务帐户检索访问令牌。并且,访问令牌被用于请求。运行此脚本时,将显示一个包含搜索到的行值的数组。

注意:

  • 在此脚本中,结果值被导出为CSV数据。它是用一个简单的脚本解析的。
  • 此脚本是一个简单的示例脚本。因此,如果解析CSV数据不正确,请使用Node的CSV数据解析器。js。

参考

相关问题