【问题标题】:Google Drive - How to Autopopulate Google Spreadsheet with Concatenate functions when users submit data via webform?Google Drive - 当用户通过网络表单提交数据时,如何使用连接功能自动填充 Google 电子表格?
【发布时间】:2015-01-30 04:06:45
【问题描述】:

我有一个 Google Drive 电子表格,我试图在其中自动填充公式,因为用户通过附加到电子表格的网络表单提交数据。棘手的部分是我已经使用了CONCATENATE 函数,将多列上提交的数据连接到一个单元格中。

但是,为了使CONCATENATE 函数起作用,我必须将它“应用”到新提交的行。 有没有办法自动将这个公式填充到电子表格的行中?

我尝试为其放置一个ArrayFormula 函数,甚至设置(A1:A) 的范围,但如果它可能是这样的话,我找不到合适的语法。

函数运行:

=CONCATENATE(CHAR(10)&X14&V14&Y14&J14&" "&K14&" "&L14&M14&N14&O14&" "&P14&" "&Q14&R14&S14&CHAR(10)&T14&"."&CHAR(10)&U14&"."&CHAR(10)&W14&CHAR(10)&CHAR(10)&CHAR(10)&I14&CHAR(10)&Z14&" "&AA14&CHAR(10)&AB14&AC14&AD14&AE14&AF14&AG14&AH14&"."&CHAR(10)&AI14&AJ14)

任何建议将不胜感激。

【问题讨论】:

  • 我怀疑您可以使用自动扩展结果的功能来做到这一点。例如数据库功能。听起来你差不多了,只需要找到合适的功能。
  • 嗨,Eddy,感谢您的建议,我会调查一下。
  • @eddyparkinson - 我从 Google 电子表格的脚本库中找到了一个小脚本(AutoFormulas,由 tuxincarnate[@]gmail[dot]com 提供),它解决了这个问题!刚刚用来自网络表单的十几个提交对其进行了测试,它确实做到了它所承诺的,在应用的列中自动填充公式。
  • 虽然您已经有了解决方案,但您可能希望将来考虑以下公式,这是您最初寻找的(您不需要使用 CONCATENATE,因为您正在选择列用 & 符号连接在一起) =arrayformula(CHAR(10)&X2:X&V2:V&Y2:Y&J2:J&" "&K2:K&" "&L2:L&M2:M&N2:N&O2:O&" "&P2:P&" "&Q2:Q&R2: R&S2:S&CHAR(10)&T2:T&"."&CHAR(10)&U2:U&"."&CHAR(10)&W2:W&CHAR(10)&CHAR(10)&CHAR(10)&I2:I&CHAR(10)&Z2:Z&" "&AA2:AA&CHAR(10)&AB2:AB&AC2:AC&AD2:AD&AE2:AE&AF2:AF&AG2:AG&AH2:AH&"."&CHAR(10)&AI2:AI&AJ2:AJ) 这应该放在第二行
  • @DavidTew:感谢大卫的建议!它比我之前找到的解决方案要好得多。我测试了“ArrayFormula”,这正是我想要的,我只是不知道我可以单独使用它。 再次感谢您的帮助!

标签: google-apps-script concatenation google-sheets array-formulas


【解决方案1】:

(由 OP 在问题编辑中回答。转换为社区 wiki 答案。见 Question with no answers, but issue solved in the comments (or extended in chat)

OP 写道:

我从 Google 电子表格的脚本库(AutoFormulas,tuxincarnate[@]gmail[dot]com)中找到了一个小脚本,它解决了这个问题!刚刚使用来自网络表单的十几个提交内容对其进行了测试,它会按照它的承诺在应用的列中自动填充公式。

// Updates all rows except the last to have the same formulas as row 3 (allowing for a header and different row 2 formula)
// To activate this functionality, the last row in the column should have the value '(auto)'
function UpdateFormulas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetCount = ss.getNumSheets();

  for (var sheetIndex = 0; sheetIndex < sheetCount; ++sheetIndex) {
    var sheet = ss.getSheets()[sheetIndex];

    var rowCount = sheet.getMaxRows();
    var columnCount = sheet.getMaxColumns();

    if (rowCount < 5) continue;

    for (var columnIndex = 1; columnIndex <= columnCount; ++columnIndex) {
      if (sheet.getRange(rowCount, columnIndex).getValue() == '(auto)') {
        var row3Range = sheet.getRange(3, columnIndex);
        for (var rowIndex = 4; rowIndex < rowCount; ++rowIndex) {
          if (sheet.getRange(rowIndex, columnIndex).isBlank()) {
            row3Range.copyTo(sheet.getRange(rowIndex, columnIndex));
          }
        }
      }
    }
  }
}

@David Tew 写道:

虽然您已经有了解决方案,但您可能希望将来考虑使用以下公式,这是您最初寻找的(您不需要使用 CONCATENATE,因为您正在选择要连接在一起的列带 & 符号)

=arrayformula(CHAR(10)&X2:X&V2:V&Y2:Y&J2:J&" "&K2:K&" "&L2:L&M2:M&N2:N&O2:O&" "&P2:P&" "&Q2:Q&R2:R&S2:S&CHAR(10)&T2:T&"."&CHAR(10)&U2:U&"."&CHAR(10)&W2:W&CHAR(10)&CHAR‌​(10)&CHAR(10)&I2:I&CHAR(10)&Z2:Z&" "&AA2:AA&CHAR(10)&AB2:AB&AC2:AC&AD2:AD&AE2:AE&AF2:AF&AG2:AG&AH2:AH&"."&CHAR(10)&‌​AI2:AI&AJ2:AJ) 

这应该放在第二行

OP 写道:

@DavidTew 向我展示了一个清晰而简单的方法来解决它。 ArrayFormula 应该单独运行,告诉它将每一列的范围放在每一行中。像魅力一样工作。正确的语法是:=arrayformula(A2:A&amp;B2:B&amp;C2:C),以便将单元格 A2B2C2 的内容“连接”到应用 ArrayFormula 的单元格中。最重要的问题是,通过使用此功能,当用户通过附加到电子表格的网络表单提交数据时,它会自动填充所有行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-08-12
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多