Python GoogleSheetsAPI:获取上次编辑的选项卡的名称

Python GoogleSheetsAPI:获取上次编辑的选项卡的名称,python,google-sheets,google-drive-api,Python,Google Sheets,Google Drive Api,我正在试图找出电子表格中最后一次更改的选项卡 我有一个谷歌表单,多个用户共享多个标签。我可以检测到用户何时做出如下更改: def testChanges(self): response = self.service.revisions().list(fileId='some-file-id').execute() revs = response.get('revisions',[]) if not len(revs): return revID =

我正在试图找出电子表格中最后一次更改的选项卡

我有一个谷歌表单,多个用户共享多个标签。我可以检测到用户何时做出如下更改:

def testChanges(self):
    response = self.service.revisions().list(fileId='some-file-id').execute()
    revs = response.get('revisions',[])
    if not len(revs):
        return
    revID = revs[-1].get('id')
    response = self.service.revisions().get(
                            fileId='some-file-id',
                            revisionId=revID,
                            fields='kind, id, modifiedTime, lastModifyingUser'
                            ).execute()
我得到的答复是:

{
  "kind": "drive#revision",
  "id": "12",
  "modifiedTime": "2018-09-17T20:10:41.330Z",
  "lastModifyingUser": {
    "kind": "drive#user",
    "displayName": "USER NAME",
    "me": true,
    "permissionId": "08921584708523400585",
    "emailAddress": "email.address@gmail.com"
  }

现在我需要处理用户刚刚更改的选项卡。我怎么知道呢?我已经检查了和,但到目前为止没有运气。

您可以创建一个for循环来扫描所有选项卡(每隔几秒钟),并将所有选项卡的修改时间存储在一个表中。编程循环,将每个选项卡的当前修改时间与上次扫描的值进行比较。当存在不匹配时,这意味着当前选项卡被修改


这只是一个想法。

我认为RESTAPI不支持这一点,也不可能做到这一点。您可能需要创建一个触发器,并使用它来记录日志(例如,将其发布到URL,将其附加到一些“sentinel”电子表格中,等等)。您可以将其与当前的
修订版
方法相结合,以了解是谁执行了修改(因为用户身份通常是受限信息,除非您在同一GSuite域中)

例如,将数据写入指定的电子表格

function installedEdit(e) {
  const edited = e.range,
        sheet = edited.getSheet();
  const row = [
    new Date(),         // Time of the edit
    e.source.getId(),   // id of the edited workbook.
    e.source.getName(),
    sheet.getName(),    // edited sheet name
    sheet.getSheetId(), // gridid for REST API
    edited.getA1Notation(),
    edited.oldValue !== undefined ? edited.oldValue : "",
    edited.value !== undefined ? edited.value : ""
  ];
  try { row.push(e.user.getEmail()); }
  catch (e) { row.push("Unknown User"); }
  // Log this row somehow
  SpreadsheetApp.openById("some spreadsheet id").getSheetByName("Edit log").appendRow(row);
}

您可以在独立的应用程序脚本项目中创建此函数,并将此函数作为需要查看的各种电子表格的编辑触发器。

如何获取特定选项卡的修改时间?我从您提交的响应中看到,有一个modifiedTime字段。(“修改时间”:“2018-09-17T20:10:41.330Z”)。每个选项卡都有此字段,对吗?。该值将在每次更新选项卡时更改。我认为这是一个很好的解决方法。例如,如何使用?在本例中,它使用可安装触发器按GAS放置值,python可以使用驱动API检索值,而无需添加和修改作用域和API。因为所需的信息很少,所以我认为它可能可以被使用。如果这对OP的情况没有帮助,请忽略这一点。