簡體   English   中英

做多個SUMIFS-Google表格腳本編輯器

[英]Doing multiple SUMIFS - Google Sheet Script Editor

我正在嘗試在Google表格腳本編輯器中執行SUMIFS

我想做的是...

我有這張桌子。

在此處輸入圖片說明

我正在嘗試創建一個如下所示的報告..(從該原始表)具有匹配的值

在此處輸入圖片說明

在此處輸入圖片說明

所以我曾經為此使用SUMIFS(value)+ SUMIFS(value)。

有沒有辦法在腳本編輯器中完成相同的工作?

關於聚集體存在一個常見問題

/**
 * @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

我編寫了一個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]);
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM