【发布时间】:2016-12-09 04:55:51
【问题描述】:
更新:已通过移至 Excel 解决。 :(
我有一个每周都有一个页面的 Google 电子表格。我目前正在使用以下自定义函数来计算名称在所有工作表中出现的总次数。
function COUNTALLSHEETS(range, countItem, excluded) {
try {
var count = 0,
ex = (excluded) ? Trim(excluded.split()) : false;
SpreadsheetApp.getActive()
.getSheets()
.forEach(function (s) {
if (ex && ex.indexOf(s.getName()) === -1 || !ex) {
s.getRange(range)
.getValues()
.reduce(function (a, b) {
return a.concat(b);
})
.forEach(function (v) {
if (v === countItem) count += 1;
});
};
});
return count;
} catch (e) {
throw e.message;
}
}
function Trim(v) {
return v.toString().replace(/^\s\s*/, "")
.replace(/\s\s*$/, "");
}
当我使用
=COUNTALLSHEETS("$A$1:$G$40", A2, "Rosters")
它返回所有工作表的值,除了那些被函数的第三个参数排除的工作表。在这种情况下,标题为“花名册”的工作表不计算在内。
我的问题是,我必须每周更新被排除在外的工作表。我目前排除了所有未来日期的工作表。所以与其之前对函数的简短调用不同,它看起来更像
=COUNTALLSHEETS("$A$1:$G$40", A2, "Rosters, 5-9Dec, 12-16Dec, ... etc.")
有没有办法修改代码本身或函数调用以自动排除未来的工作表?我希望提取当前日期,将其与工作表标题进行比较(如果需要,我可以更改以适应某种格式),并排除任何未来日期的工作表。
请告诉我任何想法;如果我需要共享电子表格的副本,我可以。
【问题讨论】:
-
如果你得到了所有的工作表名称;然后将工作表名称转换为可以转换为日期的字符串;然后将日期与今天的日期进行比较,这样行吗?因此,您将获取所有工作表名称,遍历它们,将工作表名称解析为日期,将日期与今天的日期进行比较。然后对您想要的任何内容进行测试,然后处理该工作表,或者编译一个工作表名称列表以包含或排除。
-
@SandyGood:这可行。我知道 Google 表格有办法确定日期是在另一个日期之前还是之后。我只需要更深入地研究 API。
-
日期比较可以在 JavaScript 内部完成。
标签: google-sheets formula