首页 > 解决方案 > 保留/复制公式,以便在添加新响应时自动应用 Google Apps 脚本

问题描述

我有工作表,其中有列,我在其中应用了某些公式来计算列中的单元格值。它连接到谷歌电子表格响应。每当添加新响应时,都会在行中输入数据。我试图处理脚本,以便每当输入新记录时都应该自动从上面的行中复制公式,这样我就不需要向下拖动了。

我有列

一个 | 乙| C | D

23 | 22 | 45 | 1

在 CI 列中,我尝试添加 A 和 B,并在 DI 中减去值。

我使用以下代码复制公式。但它不起作用。它基本上复制了与上一行相同的值。有人可以帮我找出错误并修复代码以获得正确的输出。

谢谢

   var ss = SpreadsheetApp.getActive();

   function onOpen() {
   var menu = [{name:"Insert New Record", 
   functionName:"insertRecord"}];
   ss.addMenu("Options", menu);
   }
   function insertRecord() {

   var sh = ss.getActiveSheet();                  
   var lRow = sh.getLastRow();                    
   var lCol = sh.getLastColumn();                 

   var range = sh.getRange(lRow,1,1,lCol);        
   var formulas = range.getFormulas();           

  sh.insertRowsBefore(lRow, 1);                 

  var newRange = sh.getRange(lRow, 1, 1, lCol);  
  range.copyTo(newRange);                        

  newRange.setFormulas(formulas);                
  }

标签: google-apps-script

解决方案


range.copyTo(newRange);尝试使用 //注释掉该行 ,如下所示:

//range.copyTo(newRange);

该行正在将数据从范围 a 复制到范围 b。

然后,您将公式从范围 a 复制到范围 b。

如果您之后立即用公式替换数据,则无需复制数据。

如果这不起作用,请尝试使用 .getFormula 和 .setFormula 而不是 .getFormulas 和 .setFormulas。.getFormulas 会将数据视为与 .getFormula 完全不同的数据集,请在此处阅读文档:https ://developers.google.com/apps-script/reference/spreadsheet/range#getformula

简而言之,.getFormula 是一个字符串,其中 .getFormulas 保存为包含字符串的二维数组。


推荐阅读