【问题标题】:Google form inserts sheet row in unexpected location谷歌表单在意外位置插入工作表行
【发布时间】:2021-07-02 00:13:54
【问题描述】:

我有一个奇怪的问题,即 Google 表单在链接表的哪一行放置了一个新的表单行。通常,每个表单提交都会向工作表添加一行,从第 2 行开始(第 1 行是标题),正如预期的那样。如果我删除工作表中的所有行,表单会按预期在第 2 行重新提交。但是,现在假设我手动填充表单的前 10 行(同样,将第 1 行作为标题,因此第 2-11 行)。现在,当我提交表单时,我希望将第 12 行添加到等等,但相反,表单从第 2 行开始并清除了我预先填充的行数据。似乎表单和工作表有一个内部的“下一行编号”,它不是基于工作表的实际内容。任何人都可以对此有所了解吗?

【问题讨论】:

  • 能否把相关代码分享给我们看看到底哪里出了问题?
  • 不容易。清除表单中除标题行 1 之外的所有行。手动将 100 行添加到绑定到表单的工作表(在标题行之后),在工作表上运行应用程序脚本:lastrow = sheet.getLastRow() 你会回来102,符合预期。现在运行一个表单,它将覆盖第 2 行(不正确)(不是标题行),而不是像预期的那样在 103 处添加行。不知何故,表单/工作表交互保留了一个“神奇”的隐藏行号,它与工作表中的实际行数不同步。

标签: google-apps-script google-forms


【解决方案1】:

我遇到了同样的问题。并找到了解决方案(挖了2个小时,问题出在哪里)

你需要使用一个函数 sheet.insertRowsBefore(rowIndex, numberOfRowsToBeInserted) 首先为您的数据创建新行(空间),然后将您的数据添加到这些创建的行。 当然,您可以在 google 表格中手动添加新行 - 它的工作原理相同。

解释:有一个内部表单属性,其中包含一个行索引,新表单提交将在表单提交之后进行。

当您只填写数据时,新表单提交的索引会停留在之前的位置,因此它会重写您在单元格中的(任何)数据。

在删除行数据时期望类似的行为 - 如果您只删除值(例如通过删除键),那么当新表单提交出现时将保持空行。同样,您需要使用函数 sheet.deleteRow(index) 删除数据并更改新提交的新行的索引。

【讨论】:

    【解决方案2】:

    听起来您正在使用getActiveCell()getActiveRange() 方法来查找最后一行。而您应该使用getDataRange() 方法来获取最后一行和最后一列。 getActiveCell()getActiveRange() 方法指向电子表格上光标的位置。因此,如果当时它位于第 1 行 - Col2,那么它将插入您的信息。有关详细信息,请参阅此documentation

    【讨论】:

    • 不,如果我在 SS 中有 10 行,我会看到 10 行返回(如预期的那样)。在这种情况下,光标是没有意义的,因为没有“用户”编辑。这不是问题 - 问题是为什么谷歌在已经存在的行上方形成 INSERT 行,而不是在已经存在的行之后。
    • 好吧,在那种情况下......没有代码......我们都在黑暗中射箭,因为很难判断可能出了什么问题。对此感到抱歉。
    • 忘记密码。这样做: 1) 打开这个表格:goo.gl/forms/jj1KcvaSc4 2) 提交一个条目 3) 打开这个表:docs.google.com/spreadsheets/d/… 4) 请注意,您刚刚添加的行在列 B 中具有 1...4 的其他行之上这是为什么?我希望将新的表单行添加到现有行的末尾。
    • 哦。现在我明白你的意思了。我以前见过这种行为。它没有明显的原因发生。或者至少不是我认识的一个。您将有更好的机会找到答案,here。将此作为问题报告。
    • 我知道这是一个老话题,但为了解决这样的情况,我抓住了最新结果的行并将其拖到我想要的位置。之后,新数据在正确的位置出现在工作表中。
    【解决方案3】:

    这是设计使然,因此表单提交永远不会覆盖用户插入的数据。此响应[1]很好地证明了这一点。

    如果您使用createResponse() 方法[2] 创建一个脚本来插入旧数据,我相信您可以解决问题。

    [1]https://support.google.com/docs/thread/10244473/google-forms-inserting-at-top-of-sheet?hl=en

    [2]https://developers.google.com/apps-script/reference/forms/form#createResponse()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多