【问题标题】:How can I retrieve rows by with the latest date by using Google SpreadSheet API?如何使用 Google SpreadSheet API 按最新日期检索行?
【发布时间】:2017-06-07 18:02:19
【问题描述】:

我有一个存储一些数据的大型 Google 电子表格文档,我需要使用 Google SpreadSheet REST API 从中检索特定行。

假设我们有以下测试数据:

ID | Name | Date
-----------------
1  | Erik | 07.06.2017
2  | Anna | 07.06.2017
3  | Kirk | 07.06.2017
4  | Erik | 06.06.2017
5  | Anna | 06.06.2017
6  | Kirk | 06.06.2017
....

我需要检索具有最新日期的行,例如:

1  | Erik | 07.06.2017
2  | Anna | 07.06.2017
3  | Kirk | 07.06.2017

我怎样才能做到这一点?

编辑:

official doc 我发现我可以通过以下请求检索范围:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A1:D5

但这不适合我,因为我需要按最大日期过滤:(

【问题讨论】:

  • 你能在另一张纸上过滤它吗?然后使用 REST
  • 很遗憾,这是只读的公共文档,我没有编辑权限。
  • 好吧,Google 表格并不是一个数据库。如何获取所有数据,然后使用带有比较器函数的 array.filter() 作为参数来创建另一个具有您需要的值的数组?
  • 您还可以创建一个独立的 GAS 文件,用作此特定工作表的 API,并在其中定义所有数据处理函数以及 doGet() 和 doPost()
  • @AntonDementiev 感谢您的建议。第一种方法可能是我的服务器的瓶颈,因为正如我所说的文档非常庞大。第二种方法对我来说看起来很有趣,似乎没有其他方法可以解决我的问题。感谢您的回答

标签: google-apps-script google-sheets


【解决方案1】:

您可以使用跟踪工作表中每个更改的事件对象来跟踪上次修改并将其“复制”到工作表中的某个固定位置,就像我在这个短视频中所做的那样。

你必须把它粘贴到你的Tools -> Script Editor

function onEdit(e) {
  var s = SpreadsheetApp.getActiveSheet(); 
  var rng = e.range;
  var ix = rng.getRow();
  var X = s.getRange( ix, 1, 1, 3 );
  s.getRange( 3, 5, 1, 3 ).copyTo( s.getRange( 4, 5 ) ); // SECOND LAST TO BUTTOM
  s.getRange( 2, 5, 1, 3 ).copyTo( s.getRange( 3, 5 ) ); // SECOND LAST TO BUTTOM
  X.copyTo( s.getRange( 2, 5 ) ); // LAST ON TOP!  
}

.. 然后您可以通过 REST 提取数据,例如:

获取https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!E2:G4

希望有帮助:)

【讨论】:

  • 抱歉回复延迟。谢谢你的剧本。我想出了类似的解决方案。你的帖子真的对我很有帮助:)
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多