【问题标题】:How to get cell edit history by Google App Script?如何通过 Google App Script 获取单元格编辑历史记录?
【发布时间】:2020-08-24 20:57:15
【问题描述】:

我有一个 Google 电子表格。当我在任何单元格上单击鼠标右键时,我可以从上下文菜单中选择 Show edit history

之后我可以在弹出窗口中看到编辑历史记录。

我的问题是如何通过脚本从单元格中获取这些数据?

我尝试使用检查选项找到解决方案,并在此处找到预期数据:

<div class="docs-blameview-authortimestamp">
  <div class="docs-blameview-author">My name
  </div>
  <div class="docs-blameview-timestamp">May 9, 11:56 AM
  </div>
</div>

有什么建议可以在 Google 表格中导入这些数据吗?

更新

我正在继续寻找解决方案。

当我使用 Chrome DevTools 检查此操作(至show edit history)时,我在“网络”选项卡上发现了此请求:

fetch("https://docs.google.com/spreadsheets/d/1xVrzBezPzOmZC7Vap-reuNcWXZx_0qONbZ67pBiHVkQ/blame?token=AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg%3A1589033535890&includes_info_params=true", {
  "headers": {
    "accept": "*/*",
    "accept-language": "en-US,en;q=0.9",
    "content-type": "multipart/form-data; boundary=----WebKitFormBoundaryFpwmP3acru2z5xQc",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-build": "trix_2020.18-Tue_RC02",
    "x-client-data": "CI62yQEIpLbJAQipncoBCNCvygEIvLDKAQjttcoBCI66ygEYmr7KAQ==",
    "x-rel-id": "6a4.4ffb56e6.s",
    "x-same-domain": "1"
  },
  "referrer": "https://docs.google.com/spreadsheets/d/1xVrzBezPzOmZC7Vap-reuNcWXZx_0qONbZ67pBiHVkQ/edit",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"selection\"\r\n\r\n[30710966,[null,[null,[null,\"629843311\",9,1],[[null,\"629843311\",9,10,1,2]]]]]\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"clientRevision\"\r\n\r\n478\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"includeDiffs\"\r\n\r\ntrue\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc--\r\n",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

我认识了一些参数的含义。我不确定是否要更正...


查询字符串参数

/* token: AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg:1589033535890
     AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg // Probably it takes from user
     1589033535890 // Timestamp of current session of current user

   includes_info_params: true  // I think that's what gets the user data                                       and editing time of the cell

表单数据:

/*
selection: 
    [30710966,    // Spreadsheet identificator (Any idea, how to get it???)
    [null,[null,
    [null,
    "629843311",  // Sheet ID in string
    9,            // cell's row - 1
    1],           // cell's column - 1
    [[null,
    "629843311"   // Sheet ID in string
    ,9            // cell's row - 1
    ,10           // cell's row
    ,1            // cell's column - 1
    ,2            // cell's column
    ]]]]]
    
clientRevision: 478   // Edit step number (How to get it???)

includeDiffs: true    // True shows last edition / false - look at previous steps 
*/

我认为可以创建自定义提取并获取 blob。然后提取上一版单元格的 Last editor name 和 timestamp。

不幸的是,我的技能很差。我只是在学习。 有人可以帮我解决这个问题吗?

【问题讨论】:

  • @TheMaster 谢谢您的回复。你怎么知道?请解释一下好吗?
  • 既然你在兔子洞里,我会删除我的评论。你正在做的是逆向工程。如果这是开源和/或记录在案的,那将不是问题。但这是谷歌拥有的专有软件。尽管有法律依据,但您还必须考虑 1.如果没有加密的 id,这可能是完全不可能的,这可能是由 Google 的内部软件提供的;2.即使您弄清楚了一切,Google 可能会在一个月左右的时间内改变一切-做不同的事情。你必须再做一遍。值得麻烦吗?

标签: javascript html google-apps-script google-sheets blame


【解决方案1】:

也许您可以使用 Drive API https://developers.google.com/drive/api/v2/reference/revisions 获取 clientRevisions 信息。 您说的电子表格 ID,30710966 似乎对每个电子表格都很常见。我有一个相同的字符串。 你很接近它,我想。 对于逆向工程,我相信向所有人开放的信息应该可以通过多种方式访问​​。如果google为此提供一些API会很棒,而且我相信他们正在准备它,因为这是一个相对较新的功能。

【讨论】:

    【解决方案2】:

    如果您准备好承担这么多麻烦,更简单的解决方案是推出您自己的编辑历史记录。只需通过 onEdit 触发器(常规或已安装)记录每个编辑。然后在必要时检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多