【问题标题】:script to force republish of google spreadsheet强制重新发布谷歌电子表格的脚本
【发布时间】:2013-02-27 14:03:41
【问题描述】:

我创建了一个将数据推送到 Google 电子表格的表单。数据是纬度、经度、位置和其他识别数据。电子表格随后以 .CSV 文件的形式发布并导入 ARC GIS 以显示在交互式地图上。它完全按照我的意愿工作,我将其设置为在每次更改后重新发布。

问题在于,当电子表格有脚本附加的行时,它不会将其视为更改并重新发布。为了将更新的数据导入到地图中,我需要进入并手动重新发布。无论如何,我可以通过 Google Apps 脚本编写几行代码来强制重新发布吗?然后,我可以将其添加到我拥有的“表单提交”脚本或另一个基于时间的脚本中,该脚本已经在每天凌晨 3 点运行。

我查看了 Google Apps 脚本文档,但没有找到任何东西。在网上搜索帮助时,绝大多数回复都是关于如何将您的脚本发布为其他人的模板。

【问题讨论】:

  • 您的凌晨 3 点脚本是否修改了电子表格?
  • 没有。提交表单时,通过添加一行数据来修改它。凌晨 3 点,它执行其他功能,读取值并将它们复制到另一个电子表格。我最后一次手动重新发布它是 2/22,从那时起,每行添加了大约 20 次。它的最后发布日期仍然是 2/22,并且地图仍然没有添加新值。
  • 您是手动将 CSV 上传到 ARC GIS 还是只提供一个 URL 并获取数据?
  • 我将 csv 版本的 url 提供给 ARC GIS。它正确显示。一旦我手动重新发布,它就会显示正确的 GIS 数据。似乎通过脚本对电子表格所做的更改不会被识别为用于确定是否应该重新发布的更改。如果您手动输入新数据,这将被视为更改并导致重新发布。有谁知道使用谷歌应用脚​​本强制重新发布的方法?

标签: google-apps-script google-sheets


【解决方案1】:

在通过菜单条目或基于时间的触发器执行以下功能后,我的测试表被重新发布。

function ChangeIt() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet()
  var t = new Date()
  var x = 'upd: ' + t
  var range = sheet.getRange('a3')
  range.setValue(x)
}

如果我站在你的立场上,我会在工作表的末尾添加一个额外的列,其中包含一些良性的常量数据,脚本可以更改这些数据而不会影响使用这些数据的系统。如果无法选择额外的列,请尝试修改我的示例以读取当前值,更改它,然后立即将其更改回来。

另外,当表单提交添加新行时,我会查看电子表格 onEdit() 触发器是否触发。如果是这样,请将您的 GAS 功能与其绑定以强制重新发布。如果没有,设置一个定时触发器来执行 GAS 函数。

【讨论】:

    【解决方案2】:

    无需编写脚本即可解决此问题的快速解决方法是简单地制作数据的数组副本。

    例如,我创建了一个新选项卡并在 A1 中输入:=ArrayFormula('Form Responses 1'!A1:Z1000)

    虽然主表单响应选项卡将插入行并且不能很好地使用公式,但这个新选项卡保持良好和不变,并在添加新数据时自动更新。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多