从 Google 可视化 API 查询到 Google Sheet 获取行号
Get row number from a Google Visualization API query to a Google Sheet
我有一个 google sheet 的查询,它按我预期的那样工作。我正在使用 Postman 进行测试,因为在我的应用程序(这是一个桌面应用程序)中,我无法使用 Google 提供的任何 SDK。这不是网络应用程序,所以我什至无法使用托管在 Google 的 CDN 上的 Javascript 源。在任何情况下,我正在查询一个有很多行的 spreadsheet,我正在查询一个特定的列:
在通过 OAuth2 方法检索到身份验证令牌后,我正在使用以下端点:
https://docs.google.com/a/google.com/spreadsheets/d/{{sheet_key}}/gviz/tq?sheet={{tab_name}}&tq={{sheet_query}}
Postman 中正确处理 URL 编码的 {{sheet_query}} 变量设置如下:
select * where C = 'ready'
对我的特定工作的回应sheet 是我所期望的,数据是正确的。 sheet 中有三行,其中 C 列设置为 'ready',这很好。
现在,对此 GET 请求的响应似乎不会发回检索到的行的序号行索引,它只是发送行的数据。问题是我想通过 Google Sheets API v4 写回这些行,它现在使用 A1 表示法作为一种方法来定位要更新的单元格范围。
问题是,为了写回通过我的可视化 API 请求检索到的这些行,我需要这些行的序号索引来请求Google Sheets API。有什么方法可以从请求中的 Sheet 获取每行的序号索引到可视化 API 调用?
我找到了 ,但我不确定这是否适用于我的情况,因为我实际上是在没有 SDK 的情况下手动构建请求。我也没有使用 Google Apps 脚本,我使用的是可视化 API。我能想到的唯一解决方法是强制最终用户确保要查询的 worksheet 有一个列,其单元格具有 =ROW()
公式,但我不想在用户的部分。
如有任何见解或指导,我们将不胜感激。
- 您想通过在 Google Spreadsheet.
中搜索 sheet 的值来检索行号
- 您想使用 Google Apps 脚本实现此目的。
我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请将此视为几个可能的答案之一。
流量:
- 检索 sheet 对象。
- 使用搜索值在 sheet 中搜索值。
- 在这种情况下,我使用了 TextFinder。
- 从搜索结果中检索行号。
示例脚本:
请将以下示例脚本复制并粘贴到脚本编辑器,并设置searchValue, spreadsheetId, sheetName
的变量。那么,作为测试运行,请运行testRun()
的功能。这样,行号将作为数组返回。
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var t = sheet.createTextFinder(searchValue).findAll();
return t.map(function(e) {return e.getRow()});
}
// Please run this function.
function testRun() {
var searchValue = "sample";
var spreadsheetId = "###";
var sheetName = "Sheet1";
var res = getRowNumberBySearch(searchValue, spreadsheetId, sheetName);
Logger.log(res)
}
参考文献:
已添加:
附加问题1:
is there a way to narrow the .findAll()
method to a specific range within the sheet so that it focuses on a single column?
示例脚本:
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
var range = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName).getRange(range);
var t = range.createTextFinder(searchValue).findAll();
return t.map(function(e) {return e.getRow()});
}
- 在这种情况下,
range
是 a1Notation。
补充问题2:
is it possible to return all of the values of the row and not just their index?
示例脚本:
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var t = sheet.getRange(range).createTextFinder(searchValue).findAll();
return t.map(function(e) {return sheet.getRange(e.getRow(), 1, 1, sheet.getLastColumn()).getValues()[0]});
}
- 在这种情况下,
range
是 a1Notation。
- 我觉得这种情况下,你问题的端点也可以用
我有一个 google sheet 的查询,它按我预期的那样工作。我正在使用 Postman 进行测试,因为在我的应用程序(这是一个桌面应用程序)中,我无法使用 Google 提供的任何 SDK。这不是网络应用程序,所以我什至无法使用托管在 Google 的 CDN 上的 Javascript 源。在任何情况下,我正在查询一个有很多行的 spreadsheet,我正在查询一个特定的列:
在通过 OAuth2 方法检索到身份验证令牌后,我正在使用以下端点:
https://docs.google.com/a/google.com/spreadsheets/d/{{sheet_key}}/gviz/tq?sheet={{tab_name}}&tq={{sheet_query}}
Postman 中正确处理 URL 编码的 {{sheet_query}} 变量设置如下:
select * where C = 'ready'
对我的特定工作的回应sheet 是我所期望的,数据是正确的。 sheet 中有三行,其中 C 列设置为 'ready',这很好。
现在,对此 GET 请求的响应似乎不会发回检索到的行的序号行索引,它只是发送行的数据。问题是我想通过 Google Sheets API v4 写回这些行,它现在使用 A1 表示法作为一种方法来定位要更新的单元格范围。
问题是,为了写回通过我的可视化 API 请求检索到的这些行,我需要这些行的序号索引来请求Google Sheets API。有什么方法可以从请求中的 Sheet 获取每行的序号索引到可视化 API 调用?
我找到了 =ROW()
公式,但我不想在用户的部分。
如有任何见解或指导,我们将不胜感激。
- 您想通过在 Google Spreadsheet. 中搜索 sheet 的值来检索行号
- 您想使用 Google Apps 脚本实现此目的。
我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请将此视为几个可能的答案之一。
流量:
- 检索 sheet 对象。
- 使用搜索值在 sheet 中搜索值。
- 在这种情况下,我使用了 TextFinder。
- 从搜索结果中检索行号。
示例脚本:
请将以下示例脚本复制并粘贴到脚本编辑器,并设置searchValue, spreadsheetId, sheetName
的变量。那么,作为测试运行,请运行testRun()
的功能。这样,行号将作为数组返回。
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var t = sheet.createTextFinder(searchValue).findAll();
return t.map(function(e) {return e.getRow()});
}
// Please run this function.
function testRun() {
var searchValue = "sample";
var spreadsheetId = "###";
var sheetName = "Sheet1";
var res = getRowNumberBySearch(searchValue, spreadsheetId, sheetName);
Logger.log(res)
}
参考文献:
已添加:
附加问题1:
示例脚本:is there a way to narrow the
.findAll()
method to a specific range within the sheet so that it focuses on a single column?
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
var range = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName).getRange(range);
var t = range.createTextFinder(searchValue).findAll();
return t.map(function(e) {return e.getRow()});
}
- 在这种情况下,
range
是 a1Notation。
补充问题2:
示例脚本:is it possible to return all of the values of the row and not just their index?
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var t = sheet.getRange(range).createTextFinder(searchValue).findAll();
return t.map(function(e) {return sheet.getRange(e.getRow(), 1, 1, sheet.getLastColumn()).getValues()[0]});
}
- 在这种情况下,
range
是 a1Notation。 - 我觉得这种情况下,你问题的端点也可以用