自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本

Posted

技术标签:

【中文标题】自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本【英文标题】:AutoFill Formula (running across spreadsheet) - Google Sheets / Apps Script 【发布时间】:2021-05-13 05:44:53 【问题描述】:

我想更改下面的代码以在整个页面中自动填充公式 - 而不是向下自动填充

您可以在下面的 2 张图片中看到,我可以将公式添加到 N527,但无法使用代码自动填充整个页面 - 这正是我正在寻找的。​​p>

所以图像是我想要完成的之前和之后

function LastColumn()
var spreadsheet = SpreadsheetApp.getActive();
var LastColumn = spreadsheet.getLastColumn();
//spreadsheet.setActiveSheet(spreadsheet.getSheetByName('MASTER'), true);
spreadsheet.getRange('N527').activate();
spreadsheet.getCurrentCell().setFormula('=sum(N497*N498*N499)/100/250');
var destinationRange = spreadsheet.getActiveRange().offset(0, 0, LastColumn -526);
spreadsheet.getRange("N527:BK527").copyTo(destinationRange);  

我无法让附加的代码工作

我正在尝试将 N527 自动填充到 AK527 - 如果上面的单元格有数据。

提前致谢

【问题讨论】:

我无法理解IF THE CELL ABOVE HAS DATA.。我为我糟糕的英语水平道歉。我可以问你目标的细节吗? 嗨 Tanaike - 如果上面的单元格(第 526 行)包含单词“carton”,则填写公式。所以第 527 行的 O 列应该有公式 spreadsheet.getCurrentCell().setFormula('=sum(O497*O498*)499)/100/250');等等等等 感谢您的回复。从你的回复中,我提出了一个答案。你能确认一下吗?如果这不是您期望的结果,我深表歉意。 【参考方案1】:

我相信你的目标如下。

你想把=sum(N497*N498*N499)/100/250的公式从单元格“N527”放到列方向。 在这种情况下,当同一列的第526行的值为carton时,您要输入公式。 您希望使用 Google Apps 脚本实现此目的。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

function LastColumn() 
  var sheetName = "Sheet1"; // Please set the sheet name.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var range = sheet.getRange('N526:526');
  var ranges = range.getValues()[0].reduce((ar, r, i) => 
    if (r.toLowerCase() == "carton") ar.push(range.offset(1, i, 1, 1).getA1Notation());
    return ar;
  , []);
  sheet.getRangeList(ranges).setFormulaR1C1('=sum(R[-30]C[0]*R[-29]C[0]*R[-28]C[0])/100/250');  // This formula is like `=sum(N497*N498*N499)/100/250`.

在这种情况下,首先检查单元格“N526:526”是否具有carton 的值。并且,当单元格具有值时,将公式放入第 527 行。 我为此使用了 RangeList。

参考资料:

getRangeList(a1Notations) setFormulaR1C1(formula) of Class RangeList

【讨论】:

【参考方案2】:

您需要将已包含公式的单元格中的公式复制到要扩展的范围内

这意味着您的目标范围应该是“O527:BK527”。

示例:

function autoFill()
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('MASTER');
  var firstCell = sheet.getRange('N527');
  firstCell.setFormula('=sum(N497*N498*N499)/100/250');
  var destinationRange = sheet.getRange("O527:BK527");
  firstCell.copyTo(destinationRange);  

【讨论】:

谢谢ziganotschka - 如果上面的单元格包含数据,我只想填充该行 - 在这种情况下,“carton”可以找到最后一列数据。

以上是关于自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本的主要内容,如果未能解决你的问题,请参考以下文章

运行 ZAPIER ZAP 后 Google 表格中的自动填充单元格

Google 电子表格自动填充基于列的行

根据另一个单元格的值自动填充单元格,不带公式

Google表格:自动将公式应用于顶部添加的新行

带有空白行的自动填充数据 - Google 表格/Google Apps 脚本

从外部数据库自动加载 Google 电子表格数据