googlesheets API:获取上次编辑的选项卡的名称

2024-06-10 01:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出电子表格中最后一次更改的是哪个选项卡。在

我有一个谷歌工作表,多个用户共享多个标签。我可以检测到用户何时进行这样的更改:

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()

我得到的答复是:

^{pr2}$

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


Tags: 用户selfidexecutegetresponseservicesome
2条回答

我不相信restapi支持或不可能实现这一点。您可能需要创建一个installed edit触发器,并使用它来记录edit event object(例如,将其发布到URL,将其附加到一些“sentinel”电子表格中,等等)。您可以将其与当前的revisions方法结合起来,以知道谁执行了修改(因为除非您在同一个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);
}

你可以在一个独立的应用程序脚本项目中创建这个函数,programmatically install这个函数作为你需要观察的各种电子表格的编辑触发器。在

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

只是个主意。在

相关问题 更多 >