执行多个SUMIFS - Google表格脚本编辑器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行多个SUMIFS - Google表格脚本编辑器相关的知识,希望对你有一定的参考价值。
我正试图在Google Sheet Script Editor中执行SUMIFS
我要做的是......
我有这张原始表。
我正在尝试使用匹配的值(来自该原始表)创建一个类似于下面的报告..
所以我以前使用SUMIFS(值)+ SUMIFS(值)。
有没有办法在脚本编辑器中执行相同的工作?
答案
我写了一个test
函数来读取ACTIVE工作表值并在不同的工作表中写出不同的供应商报告。如果您想了解有关我的代码的更多信息,请在评论中告诉我。
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getDataRange().getValues();
// remove header row values from array
values.shift();
// will be months present in data
// { JAN: 1, FEB: 1 ... }
var mos = {};
// data structure
// { A: {JAN: [value1, value2] }... }
var ds = {};
values.forEach(function(row) {
var month = row.shift(); // 1st col
var ven = row.shift(); // 2nd col
mos[month] = 1; // set month on mos
ds[ven] = ds[ven] || {};
// set value on ds
// example = ds.A.JAN = [ A+B, C+D ]
ds[ven][month] = [parseInt(row[0]) + parseInt(row[1]), parseInt(row[2]) + parseInt(row[3])];
});
// Logger.log(mos);
var months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
// filter months to get months present in sheet data in order
months = months.filter(function(m) {
return mos[m] == 1;
});
// Logger.log(months);
// result object, for each vendor create array of rows
// { A: [ row, row... ]... }
var rs = {};
Object.keys(ds).forEach(function(v) {
rs[v] = rs[v] || [];
months.forEach(function(m) {
if (ds[v][m]) {
rs[v].push([m, ds[v][m][0], ds[v][m][1]]);
} else {
rs[v].push([m, 'N/A', 'N/A']);
}
});
});
// Logger.log(rs);
// write rows
Object.keys(rs).forEach(function(v) {
var headers = [['Vendor', v, 'Report'].join(' '), 'Conversion (A+B)', 'Conversion (C+D)'];
// insert headers into rows for writing
rs[v].unshift(headers);
try {
ss.insertSheet(headers[0]);
} catch (e) {}
var sh = ss.getSheetByName(headers[0]);
sh.clear();
sh.getRange(1, 1, rs[v].length, 3).setValues(rs[v]);
});
}
另一答案
有关聚合的常见问题
/**
* @customfunction
*/
function BLAHBLAHFUNCTION(range) {
var header = range.shift();
var vendors = range.map(function(row){return row[1];});
var r = range.reduce(function(p, row) {
if (!p.hasOwnProperty(row[0])) {
p[row[0]] = {};
vendors.forEach(function(vendor){
if (!p[row[0]].hasOwnProperty(vendor))
p[row[0]][vendor] = { AB: 0, CD: 0 };
});
}
p[row[0]][row[1]].AB += row[2] + row[3];
p[row[0]][row[1]].CD += row[4] + row[5];
return p;
}, {});
var res = [header.slice(0,2).concat('AB', 'CD')];
for(var month in r){
for(vendor in r[month]){
res.push([month, vendor, r[month][vendor].AB, r[month][vendor].CD]);
}
}
return res;
}
我的例子https://docs.google.com/spreadsheets/d/1yo627ZkT7zG7_Aj86Ww0iqUTd2o1xCAY_hDWk9DPsao/edit?usp=sharing
以上是关于执行多个SUMIFS - Google表格脚本编辑器的主要内容,如果未能解决你的问题,请参考以下文章