【问题标题】:How can I maintain referential integrity between two google spreadsheets?如何维护两个谷歌电子表格之间的参照完整性?
【发布时间】:2014-04-14 20:56:23
【问题描述】:

假设我有三个电子表格。一个有员工列表及其联系信息,我们称之为电子表格 A。另一个有员工列表和他们最喜欢的颜色(电子表格 B),第三个有员工列表及其生日、宠物名和姓氏审核日期(电子表格 B)。

当我们将员工添加到电子表格 A 时,电子表格 B 和 C 中应该有一个新行显示员工的姓名,但该行的其余部分应该是空白的。

当我们在电子表格 A 上更新员工的姓名(有人结婚了!)时,该更改应该传播到电子表格 B 和 C。(请注意,使用导入范围函数很容易做到这一点:https://support.google.com/drive/answer/3093340

当我们从电子表格 A 中删除员工时,我们希望删除电子表格 B 和 C 中的整行(或者只是将员工的姓名替换为明显的“已删除”之类的名称)。

不需要双向同步(如果有人更新了电子表格 B 或 C,电子表格 A 可以保持不变,如果他们更新了 B 或 C 上的员工姓名,则不需要传回)。

我在谷歌上环顾四周,发现堆栈溢出。可能有一组自定义谷歌应用程序脚本提供此功能,但我还没有找到。这本书和它基于讨论使用 mysql 作为 google 电子表格的后端的博客:https://leanpub.com/googlespreadsheetprogramming 但我认为这不是我想要的。

我考虑过的选项:

  • 将它们汇总到一个电子表格中 - 这不适用于我正在解决的真正问题
  • 使用导入范围。这解决了更新功能,但没有解决插入/删除问题
  • 使用 importrange 将名称导入到不同的电子表格 B 和 C 表中,然后使用数据验证在名称列中强制执行正确的名称。这可能适用于更新/删除案例,但设置新的电子表格 (D) 会非常繁琐,而且很难区分名字和姓氏。
  • google 融合表——它们有一些限制,使我们无法批量迁移到它们

【问题讨论】:

  • 有趣的问题。将电子表格合并为一张大型主电子表格中的每个表格会有什么问题?
  • @br1ckb0t 组织的不同部门负责不同的电子表格,并且可能包含敏感数据。即使我可以将它们合并到一个包含不同工作表的电子表格中,那将如何解决插入或删除场景?
  • 既然您可以清楚地表达您的问题,您可能会尝试编写脚本?我知道,这不是很有帮助,但这可能是最简单的答案......
  • @Rom1 我试图避免编写自定义代码,但这可能是必需的。
  • Fusion SQL 与 JET/T-SQL 相比是有限的,但这取决于你的关系结构有多复杂。即兴发挥,我想说你不能通过合并嵌套比 1 层更深(如果你的连接可以用 WHERE 子句模拟,则为 2 层)。但是 Fusion 表确实支持计算列,如果需要,您可以在工作表中操作更复杂的结构,然后上传到临时 Fusion 表以供参考。 Fusion API 现在确实比 Visualization HTTP 方法更快地执行请求。

标签: google-apps-script google-sheets


【解决方案1】:

我以前不止一次以不同的方式这样做过。 首先,我建议最简单的一个:如果更新 A B 和 C 的角色都有权查看所有数据,您可以将所有信息保存在一个主电子表格中,并有一个生成 B 和 C 的脚本(比如每小时,或实时与 onChange)。这样,您仍然可以像以前那样拥有读者角色。缺点:写角色可以访问所有。

其次,这个确实涵盖了您的所有要求。在 A 中有一个 onChange 来检测更改的行,并且只更新/删除 B、C 中的行。 这里的完整性有点困难,因为可以一次插入/删除许多行,而且如果您的 onChange 失败(我们知道脚本 api 调用有时会失败),完整性就会中断。最简单的解决方法是每隔几个小时调用第一个脚本(强制同步所有行),以使其“最终一致”。

这假定仅在 A 上删除/插入行。

【讨论】:

猜你喜欢
  • 2017-05-27
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多