(最终尝试从多个工作表创建一个劳动日志)
对于每个“项目”,我都会从一个模板创建一个新的工作表。每个新工作表将自动重命名为项目编号,并将该编号添加到主列表中。
在每一个新的项目表中都有一个关于劳动力和材料的部分。
我正在尝试让过滤器功能抓取主列表中列出的每个工作表,并从多个工作表返回所有的劳动信息。
主列表复制到测试表中的帮助行(L3:L)
人工表示法(INDIRECT SHEET!I21:I)
劳工小时数( (INDIRECT SHEET!H21:H__)
也许我走错路了。
当前代码仅返回列表中的第一个工作表:=filter({indirect("'"&L3:L&"'!H21:H")},{indirect("'"&L3:L&"'!I21:I")} = "Labor")
发布于 2020-11-24 09:07:51
答案:
您需要使用脚本来完成这一任务,而不是仅仅通过公式。
更多资料:
有些事情太复杂了,不能单用公式来做。在这些情况下,可以使用书面脚本来完成缺少功能的地方。
您可以从Sheets中的Tools > Script editor菜单项打开脚本编辑器。
代码:
// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0
function appendToLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var log = ss.getSheetByName("Labor Log");
var a1Not = "I21:I";
sheets.forEach(function(sheet) {
if (sheet.getName() != "Labor Log") {
let range = sheet.getRange(a1Not);
let laborCells = range.createTextFinder("Labor").findAll();
laborCells.forEach(function(cell) {
let data = sheet.getRange(cell.getRow(), 8, 1, 8).getValues().flat();
console.log(data);
let newRow = [ "", data[0], data[6], data[2]];
log.appendRow(newRow);
});
}
});
}这个函数的运行:
Labor Log,那么:I21:I以查找关键字“劳动”Hא:Oא,其中א是列I中包含单词“劳动”的行。Labor Log的工作表中。您可以通过按run按钮(▶)从脚本编辑器页面运行此操作,也可以在电子表格中设置一个按钮。确保保存脚本!
分配给按钮:
您可以创建一个表内按钮,当您单击脚本时,该按钮将运行脚本。
Insert > Drawing菜单项并创建一个形状;任何形状都可以,这将充当您的按钮。Save and Close将此添加到工作表中。⋮).单击此命令,然后单击Assign script。appendToLog并按OK。现在,每次单击按钮时,脚本都会运行。
参考文献:
https://stackoverflow.com/questions/64929630
复制相似问题