使用Google脚本更新gsheets公式范围

时间:2017-02-24 20:53:59

标签: google-apps-script

这最初发布在谷歌产品论坛上,但在那里没有太大的吸引力。我试图找到一个脚本(或公式方法,如果可能的话),可以通过某个动作或按下按钮来更新公式范围。

我已经创建了一个电子表格来说明here

在此表格中,我在report tab,单元格C3中有一个查询公式,如下所示:

=query({'20Feb'!$A:$C;'21Feb'!$A:$C},"select Col3 where Col2 = '" & $B3 & "' ",0)

我想更新以下内容:

'20Feb'!$A:$C;'21Feb'!$A:$C

通过脚本或一些公式(我尝试间接但没有成功,不喜欢多个标签)。

这里的想法是我可以添加带有日期范围的新标签,然后按一个按钮运行一个脚本,更新它以包含用于报告目的的新标签。输出将是:

=query({'19Feb'!$A:$C;'20Feb'!$A:$C;'21Feb'!$A:$C},"select Col3 where Col2 = '" & $B3 & "' ",0)

在一个完美的世界中,我可以使用单元格输入来提供脚本,这样就可以使用单独的选项卡来更新"脚本更新"可能有一个地方我可以用'19Feb'!$A:$C;'20Feb'!$A:$C;'21Feb'!$A:$C写出新范围,将其粘贴在A1中,然后告诉脚本"更新到单元格{{1}中的任何内容当前工作表"

很抱歉,如果这个细节太多了。感谢任何帮助!一个人确实发布了一个脚本,它将任何文本范围复制到一个新范围,但并不专门使用公式。如果它有用,我可以在这里播放。

1 个答案:

答案 0 :(得分:0)

您需要在公式中使用转义符号,但它可以正常工作:

var nameReportSheet = "Report";
var targetCellNotationForQuery = "C3";

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Generate Formula")
    .addItem("Generate Formule","generateFormula")
    .addToUi();
}

function generateFormula() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var formula = "=query({<DATA>},\"select Col3 where Col2 = '\" & $B3 & \"' \",0)";
  var data = [];
  sheets.forEach(function(sheet) {
    if(!new RegExp(nameReportSheet,"i").test(sheet.getName()))
      data.push("'" + sheet.getName() + "'!$A:$C");
  });
  var newFormula = formula.replace("<DATA>",data.join(";"));
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nameReportSheet).getRange(targetCellNotationForQuery).setValue(newFormula);
}