Google Sheets API——自动获取工作表的最大范围

blu*_*yke 2 google-sheets node.js google-api-nodejs-client google-sheets-api

众所周知,为了从 Google Sheets API 中的行列中获取值,格式如下:

gapi.client.sheets.spreadsheets.values.get({
  spreadsheetId: id,
  range: "myData!A1:E" 
}).then(res => {
  console.log(res.result);
}, err => console.log(err));
Run Code Online (Sandbox Code Playgroud)

请注意,“范围”必须在特定参数内,但如何简单地获取最大范围内的值?是否有像“myData!Min:Max”这样的简写?我知道您可以提出另一个请求来获取最大行和列长度:

sheets.spreadsheets.get({
    spreadsheetId: id,
    ranges: [],
    auth: something
}, (err, resp) => {
    var sheetOne = resp.data.sheets[0];
    console.log(sheetOne.properties.gridProperties); // { rowCount: 1024, columnCount: 7 } (for example)
})
Run Code Online (Sandbox Code Playgroud)

然后一旦我有了,理论上我可以使用数字到字母的切换系统自动生成范围字符串以获取列字母名称或类似的内容,并发出另一个请求以获取最大列,但首先:

  1. 制作一个从数字最大值返回字母格式范围的函数可能很复杂
  2. 即便如此,我只想获取其中包含非空值的范围;如果我有一个 1000 行的电子表格,但只使用前 20 行和列,那么我想自动将范围限制为实际值。

有什么办法可以用 API 来做到这一点吗?

Mar*_*rst 11

要返回名为 的工作表中的所有单元格myData,您可以使用myData, 而不是myData!A1:E

gapi.client.sheets.spreadsheets.values.get({
    spreadsheetId: id,
    range: "myData" 
}).then(res => {
    console.log(res.result);
}, err => console.log(err));
Run Code Online (Sandbox Code Playgroud)

关于你的第二个问题,据我所知,没有办法使用A1表示法仅获取其中包含非空值的范围。

但是,一旦 api 返回这些值,您就可以迭代这些值来确定哪些值具有值。

来自https://developers.google.com/sheets/api/guides/concepts

A1 表示法:

某些 API 方法需要 A1 表示法的范围。这是一个类似于 的字符串Sheet1!A1:B2,它引用电子表格中的一组单元格,通常在公式中使用。例如,有效范围是:

  • Sheet1!A1:B2指的是 Sheet1 顶部两行中的前两个单元格。
  • Sheet1!A:A指的是 Sheet1 第一列中的所有单元格。
  • Sheet1!1:2指的是Sheet1 的前两行中的所有单元格。
  • Sheet1!A5:A指的是 Sheet1 第一列的所有单元格,从第 5 行开始。
  • A1:B2指第一个可见工作表顶部两行中的前两个单元格。
  • Sheet1引用Sheet1 中的所有单元格。