【发布时间】:2019-07-25 15:37:30
【问题描述】:
我们有数百个由人工(通过 UI)或自动化(在人工 ID 下运行)修改的 Google 表格。修改可以是任何内容,从更改单元格值到添加新工作表。
我希望以编程方式获取每个文件最后一次由人通过 UI 而不是由自动化修改的时间。
出于各种原因,我们不能也不想在每个工作表中添加onEdit 代码。
我已经检查了Drive.Revisions.list(fileID) 和Drive.Files.get(fileID),但它没有显示编辑是如何进行的——无论是通过 UI 还是通过自动化。
是否可以获取文件的最后修改日期,但仅限于人工使用 Web UI 而不是自动化进行的修改?
更新:
我想解释一下“由人类使用 Web UI 而不是自动化进行的修改”是什么意思。
可以通过两种方式编辑 Google 表格。
- 使用网络用户界面的人类 = 人类用户打开他/她的网络浏览器,打开 Google 表格文档并开始进行更改
-
自动化 = 脚本/程序以编程方式打开 Google Sheet 文档(例如,
SpreadSheetApp.openById(...))然后进行更改
挑战在于,如果在用户(如我)的上下文中执行 Google Apps 脚本,那么文件的正常活动日志(如用户最后一次更改)将显示该用户,即使他们没有使用 Web UI 进行更改,他们使用自动化进行更改。
更新 2:
有关我们用例的更多详细信息:
- 我们的团队使用 Google 表格来跟踪我们项目的详细信息
- 每个项目都有自己的工作表
- 当我们的团队有一个新项目时,会根据模板工作表创建一个新工作表
- 我们团队中的人类用户打开工作表并进行所需的任何更新
- 我们还有一个 Google Apps 脚本,它每天打开一次工作表并对工作表进行自己的更新
- Google Apps 脚本在我拥有的每日触发器上运行
- 我也是团队成员,所以我也会单独打开工作表进行编辑
所以:
- 工作表由我们团队的人类成员(包括我)编辑
- 或者工作表由在我的用户下运行的 Google Apps 脚本编辑
现在我的需要是每天我都需要收集每张工作表最后一次由人类编辑的时间。
- 我不能只检查上次修改,因为脚本可能进行了编辑,而我们不想要这些
- 我无法排除我所做的所有编辑,因为我可以手动更改工作表
由于开销,我不想为每张纸使用onEdit。我们不希望最终得到成百上千的工作表,每个工作表都绑定了自己的脚本项目。如果在代码中发现了错误,我们将不得不对所有工作表进行编辑——这不切实际。我们已经创建了几百张没有任何代码的工作表,所以如果我们走onEdit 路线,我将不得不手动将它们添加到每个现有工作表中。
【问题讨论】:
-
我为我糟糕的英语水平道歉。我无法理解
modifications made by a human using the web UI and not by automation。可以问一下它的详细信息吗? -
如果我理解你的意思,你想捕捉日期(可能是细节)当/如果有人对工作表进行更改但你不想使用 onEdit。有趣的是,您是否探索过G Suite Admin SDK。我原以为需要某种“审计”报告;也许有一个附加组件,您是否探索过该选项?
-
@Tanaike 我更新了问题。我希望能为你澄清它。
-
@IMTheNachoMan 您想知道电子表格是由用户的浏览器还是脚本编辑的。我可以这样理解。我的理解正确吗?如果我的理解是正确的,那么在这种情况下,运行的脚本是谁?但是,如果您的问题已经解决,也请告诉我。那时,我不想再考虑解决方法了。
-
我现在更清楚地认识到你的问题,虽然我不明白。数百张但您想要文件的日期戳而不是任何给定的工作表。您能否编辑您的问题以描述在任何给定时间处理您的电子表格的用户数量,以及他们是否进行数据输入,或者可以添加/删除列/行/工作表/等?您是否还请解释一下您“不能也不想将 onEdit 代码添加到每个工作表”的原因?我问是因为 i)
onEdit(e)是一种可能的解决方案,并且 ii)无论有多少张,您都不需要(也不想要)每张纸上的onEdit。
标签: google-apps-script google-sheets