【问题标题】:How do I automatically copy formules from above row in Google Sheets?如何自动从 Google 表格的上一行复制公式?
【发布时间】:2021-09-17 14:50:59
【问题描述】:

我制作了一个简单的用户界面来获取用户数据。它获取一些条目,将其放入指定的数据库并清除表格。这很好用。虽然第 0 到 6 列是用户数据,但第 7 到 11 列是使用 0 到 6 数据的公式。我正在寻找一种解决方案,用户不必输入数据然后手动需要复制上述公式。我不想事先输入公式,因为我认为我会遇到问题,因为脚本会查找最后一行。

简而言之:它需要找到工作表上的最后一行,将数据写入新行并将第 7 到 11 列中的公式从其上方的行复制到新行。完全是菜鸟,这有意义吗?

function submitData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSS = ss.getSheetByName("Form");
  var datasheet = ss.getSheetByName("Database");

  var values = [[formSS.getRange("d3").getValue(),
                formSS.getRange("d5").getValue(),
                formSS.getRange("d7").getValue(),
                formSS.getRange("d9").getValue(),
                formSS.getRange("d11").getValue(),
                formSS.getRange("d13").getValue()]]
  
  datasheet.getRange(datasheet.getLastRow()+1,1,1,6).setValues(values)

  formSS.getRange("d3").clearContent();
  formSS.getRange("d5").clearContent();
  formSS.getRange("d7").clearContent();
  formSS.getRange("d9").clearContent();
  formSS.getRange("d11").clearContent();
  formSS.getRange("d13").clearContent();
}

【问题讨论】:

  • 您可以使用array formulas 来执行此操作。这完全取决于您在第 7 列到第 11 列中有哪些公式
  • 谢谢,但例如 H10 中的公式之一是这样的:=IMPORTXML(($B$1&""&B10)&"/","//div[@class='priceValue ']") 我无法使用 arrayFormula。有什么建议吗?
  • 如果您使用IMPORTXML 获得的数据是静态的,则最好将此公式替换为UrlFetchApp.fetch(url)。这样,您将删除大量 IMPORTXML 公式,这些公式会从您的表格中不断更新,并且它会更快地开始工作。我认为这个example 会帮助你

标签: google-apps-script google-sheets


【解决方案1】:

有几个选项可以解决您的任务:

方案一:在为要插入的行生成数据数组时,可以从上一行读取公式,并在插入前添加到数组中

...
  var values = [formSS.getRange("d3").getValue(),
                formSS.getRange("d5").getValue(),
                formSS.getRange("d7").getValue(),
                formSS.getRange("d9").getValue(),
                formSS.getRange("d11").getValue(),
                formSS.getRange("d13").getValue()],
      lastRow = datasheet.getLastRow(),
      formulas = datasheet.getRange(lastRow,7,1,5).getFormulasR1C1();
  
  datasheet.getRange(lastRow+1,1,1,11).setValues([[...values,...formulas[0]]])
...

选项 2。 您可以直接在脚本中插入公式,而无需从工作表中读取它们

...
  var values = [[formSS.getRange("d3").getValue(),
                formSS.getRange("d5").getValue(),
                formSS.getRange("d7").getValue(),
                formSS.getRange("d9").getValue(),
                formSS.getRange("d11").getValue(),
                formSS.getRange("d13").getValue(),
                '=FormulaR1C1 for column 7',
                `=IMPORTXML(R1C2&R[0]C[-6]&"/","//div[@class='priceValue ']")`,
                '=FormulaR1C1 for column 9',
                '=FormulaR1C1 for column 10',
                '=FormulaR1C1 for column 11',]]
  
  datasheet.getRange(datasheet.getLastRow()+1,1,1,11).setValues(values)
...

【讨论】:

  • 谢谢,我使用了选项2。我不知道R1C1,真的很强大。你介意我在下一个问题中标记你吗?它将是关于将新条目与数据库中的现有数据相结合。
  • 一点也不。我很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2018-07-20
相关资源
最近更新 更多