java - 如何从谷歌表格中获取修改后的内容?
问题描述
我试图在给定时间后从谷歌表格中获取修改后的内容。我无处可以找到获取数据的api。我可以看到仅从驱动 Api 获取修改日期。如何使用 Drive 或 Sheets Api 获取数据?如果可能的话给我建议
解决方案
Google Drive 会跟踪其中包含的文件的修订历史记录。但是,无法仅从请求中获取修订。
Google 允许您在用户对您的工作表进行编辑时接收电子邮件通知,您可以通过完成以下步骤进行设置:
- 在电子表格的 Web 视图中,单击
Tools -> Notification rules...
- 在
Notify me at myemail@address.ext when...
选择下Any changes are made
- 在
Notify me with...
选择下Email - right away
- 单击
Save
。
您还应该注意,您不会收到有关您对工作表进行编辑的通知 - 仅当其他用户编辑工作表时才会收到通知。每当您收到电子邮件通知时,您都会收到一个链接,以只读 Web 视图链接的形式查看电子表格的更改。
您可以以编程方式解决此问题,尽管没有一种正确的方法,而且可能非常复杂。您可以使用Revisions: list
Drive REST API 的方法来获取有关进行编辑的用户的信息,以及可用于将该工作表的修订版导出到另一个 MIME 类型的链接列表,如下面的请求响应。
请求:
GET https://www.googleapis.com/drive/v3/files/SPREADSHEET_ID/revisions
使用revisions/exportLinks,revisions/lastModifyingUser/emailAddress
作为fields
字段并将 SPREADSHEET_ID 替换为电子表格的 ID 将为您提供200
响应:
{
"revisions": [
{
"lastModifyingUser": {
"emailAddress": "username@domain.ext"
},
"exportLinks": {
"application/x-vnd.oasis.opendocument.spreadsheet": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=ods",
"text/tab-separated-values": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=tsv",
"application/pdf": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=pdf",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=xlsx",
"text/csv": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=csv",
"application/zip": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=revisionNumber&exportFormat=zip",
"application/vnd.oasis.opendocument.spreadsheet": "https://docs.google.com/spreadsheets/export?id=SPREADSHEET_ID&revision=1&exportFormat=ods"
}
}
]
}
通过单个更改的链接,您可以使用 Apps 脚本获取和比较不同版本的工作表,并输出版本之间具有不同值的单元格的 A1 表示法。使用原始Revisions: list
请求中的电子邮件地址,这足以编译包含的文件或日志。
您可以将其放入绑定到工作表的简单onEdit()
触发器中,这将允许您在每次用户编辑工作表时自动获取更改。
推荐阅读
- python - 如何将python中的嵌套循环转换为pyspark
- django - 用于 Celery/Redis 的 SSL 证书 - 我不理解 'keyfile'、'certfile' 和 'ca_certs'
- apache-flink - flink 会在每个流中复制元素还是使用相同的对象?
- android - Android Studio 未知片段上的绿色文本
- android - Android 资源链接失败 < :app:processDebugResources
- java - 在 ExoPlayer2 上找不到同步字节 m3u8
- r - 用数值 R 替换字符属性
- mysql - 查询以生成预期结果
- python - 解析从 Spark 数据帧写入的 TFRecord 文件中的字节字符串时,为什么我无法解析所有数据?
- c++ - 基于 std::chrono::high_resolution_clock 的帧定时器