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

问题描述 投票:0回答:1

我有一张包含数千行的工作表,我试图查询它而不是每次都获取所有内容。 我看了一下查询语言,但它似乎不适合我的情况。

我正在使用服务帐户进行身份验证:

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"

有什么想法可以去哪里看吗?

javascript node.js google-sheets google-sheets-formula
1个回答
2
投票

我相信您的目标如下。

  • 您想通过像
    select * where B = ''9831"
    这样的查询检索行值。
  • 您希望使用 Node.js 的服务帐户和 googleapis 来实现此目的。

修改要点:

  • 我猜你对

    select * where B = ''9831"
    的查询可能是
    select * where B = '9831'

  • 不幸的是,在现阶段,像

    select * where B = '9831'
    这样的查询无法与Sheets API一起使用。在这种情况下,需要使用访问令牌来使用查询语言的端点。 参考

当这些要点反映在示例脚本中时,下面的示例脚本怎么样?

示例脚本:

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.js 的 CSV 数据解析器。 js.

参考

© www.soinside.com 2019 - 2024. All rights reserved.