当前位置: 首页 > 知识库问答 >
问题:

从Google可视化API查询获取行号到Google工作表

储国发
2023-03-14

我有一个对谷歌工作表的查询,它正按照我的预期工作。我正在使用Postman进行测试,因为在我的应用程序中-

在通过OAuth2方法检索到身份验证令牌之后,我正在使用以下endpoint:

https://docs.google.com/a/google.com/spreadsheets/d/{{sheet_key}}/gviz/tq?sheet={{tab_name}}&tq={{sheet_query}}

Postman中正确处理URL编码的{sheet_query}}变量设置为以下值:

选择*其中C='准备'

我的特定工作表的响应是我所期望的,并且数据是正确的。表中有三行,其中C列被设置为“就绪”,这很好。

现在,对这个GET请求的响应似乎并没有发回检索到的行的顺序行索引,它只是发送行的数据。问题是我想通过GoogleSheetsAPIv4写回这些行,它现在使用A1表示法作为目标来更新哪个单元格范围。

问题是,为了回写通过可视化API请求检索到的这些行,我需要这些行的顺序索引,以便请求GoogleSheetsAPI。是否有任何方法可以从Visualization API调用请求中的工作表中获取每一行的顺序索引?

我发现了这个堆栈溢出线程,但我不确定它是否能在我的情况下工作,因为我基本上是在没有SDK的情况下手动构建请求。我也没有使用谷歌应用程序脚本,我使用的是可视化API。我能想到的唯一解决办法是强制最终用户确保要查询的工作表有一个列,其单元格具有=ROW()公式,但我不希望对用户提出这一要求。

任何见解或指导都将不胜感激。

共有1个答案

云开诚
2023-03-14
  • 您希望通过在Google电子表格中搜索工作表中的值来检索行号

我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一。

请复制并粘贴以下示例脚本到脚本编辑器,并设置search chValue、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)
}
  • Class TextFinder
  • 地图()

有没有办法缩小的范围。findAll()方法在工作表中的特定范围内进行调整,以便将焦点放在单个列上?

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是一个符号

是否可以返回行的所有值,而不仅仅是它们的索引?

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]});
}
  • 在这种情况下,范围是a1Notation。
  • 我认为在这种情况下,你问题的终点也可以使用。
 类似资料:
  • 如何在悬停时以百分比形式显示数据?我可以让网格线显示百分比,但悬停始终显示未格式化的数据:vs。

  • 我需要使用Python从工作表中删除一行。我们的工作表上有数千条记录,数据会定期更新,因为所有的事情都是用Python完成的,所以这个任务也需要用Python完成。 这就是我到目前为止从留档和其他教程中得到的: 与工作表的连接必须在不同的函数中进行,因为我在其他地方多次使用它,但在下一个函数中,我会发出请求并得到错误: 错误: 我搜索过的每一个SOF示例和类似问题都使用了完全相同的请求!但我仍然无

  • 问题内容: 我正在寻找创建一个通过ajax更新的仪表盘仪表。下面是我的代码。我有ajax代码,但不确定如何更新量规。有什么建议? 阿贾克斯代码… foreach($ obj-> sensor as $ unit){if($ unit-> label ==“ Temp”){echo $ unit-> tempf。“ F”; }} 问题答案: 您也可以使用相同的代码进行更新。您需要创建一个新的数据表实

  • 根据API,似乎无法指定将数据附加到何处的工作表。它在第一个工作表中附加所有内容。真的是这样吗? 因为我可以创建一个包含多张工作表的文件,但是我不能在第二张工作表上写字?

  • 问题内容: …基本上是在google-viz工具提示中添加其他信息。接受的答案看起来不错,但是我正在使用GWT API。从最新版本(1.1)的数据来看,数据表不支持此功能… http://gwt-google- apis.googlecode.com/svn/javadoc/visualization/1.1/com/google/gwt/visualization/client/DataTabl

  • 问题内容: 我正在尝试构建一个Google Apps脚本网络应用程序,该应用程序将从Google表格中提取数据并在浏览器的HTML页面中以行和列显示它们。 通过遵循示例等,我编写了此代码! 通过以下HTML模板提取位于A,B,C,D列中的数据并正确显示它们 与其从A,B,C,DI获取所有行和所有列,不如运行SQL查询以使用WHERE子句(如SQL)检索某些列。我了解在电子表格中起作用的= QUER