这最初发布在谷歌产品论坛上,但在那里没有太大的吸引力。我试图找到一个脚本(或公式方法,如果可能的话),可以通过某个动作或按下按钮来更新公式范围。
我已经创建了一个电子表格来说明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}中的任何内容当前工作表"
很抱歉,如果这个细节太多了。感谢任何帮助!一个人确实发布了一个脚本,它将任何文本范围复制到一个新范围,但并不专门使用公式。如果它有用,我可以在这里播放。
答案 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);
}