Search code examples
google-apps-scriptgoogle-sheets

how to wrote 'SUM' or 'function' or 'MOY' that can feet any line


I have a list of value to wrote on different sheet of a spreadsheet;

the code look like that :

  const sss = SpreadsheetApp.getActive();
  const SHEET_TO_GET = ['BOURGET', 'ALPINES MUSEUM DAV', 'BLOIS_MAQUETTE', 'BELVEDERE MUSEUM', 'BELVEDERE MUSEUM'];
  const DATA_TO_WRITE = [['2D', "MAREIKE", '50', '33.0'],
  ['PROJECT MANAGEMENT', "LOUISE", '50', '16.5'],
  ['PROJECT MANAGEMENT', "MAREIKE", '50', '6.0'],
  ['FABRICATION', "MAREIKE", '50', '6.0'],
  ['2D', "MAREIKE", '50', '31.5']];
  SHEET_TO_GET.forEach((n, i) => {
    let sh = sss.getSheetByName(n);
    let col1 = sh.getRange("A1:A" + sh.getLastRow()).getValues().flat();
    let nr = col1.indexOf("MATERIAL") + 1;
    sh.insertRowBefore(nr);
    sh.getRange(nr, 1, 1, DATA_TO_WRITE[i].length ).setValues([DATA_TO_WRITE[i]]);
  });

but in a perfect world, I would like to wrote one more information, a "value" that will make a sum of the column C*D (in the column E) for each row where a value is wrote, no matter the row where it is wrote.

here is the value :

DATA_TO_WRITE = [['2D', "MAREIKE", '50', '33.0'],
  ['PROJECT MANAGEMENT', "LOUISE", '50', '16.5'],
  ['PROJECT MANAGEMENT', "MAREIKE", '50', '6.0'],
  ['FABRICATION', "MAREIKE", '50', '6.0'],
  ['2D', "MAREIKE", '50', '31.5']];

and I would like to know if there is anyway to wrote something like that :

const DATA_TO_WRITE = [['2D', "MAREIKE", '50', '33.0', "=SUM(C*D)"],
  ['PROJECT MANAGEMENT', "LOUISE", '50', '16.5', "=SUM(C*D)"],
  ['PROJECT MANAGEMENT', "MAREIKE", '50', '6.0', "=SUM(C*D)"],
  ['FABRICATION', "MAREIKE", '50', '6.0', "=SUM(C*D)"],
  ['2D', "MAREIKE", '50', '31.5', "=SUM(C*D)"]];

Or do I have to think about something more complicated ?

here what the code produce : enter image description here

here is my wish : enter image description here


Solution

  • Try this:

    function myfunck() {
      const ss = SpreadsheetApp.getActive();
      const ns = ['Sheet0', 'ALPINES MUSEUM DAV', 'BLOIS_MAQUETTE', 'BELVEDERE MUSEUM', 'BELVEDERE MUSEUM'];
      let vs = [['2D', "MAREIKE", '50', '33.0'],
      ['PROJECT MANAGEMENT', "LOUISE", '50', '16.5'],
      ['PROJECT MANAGEMENT', "MAREIKE", '50', '6.0'],
      ['FABRICATION', "MAREIKE", '50', '6.0'],
      ['2D', "MAREIKE", '50', '31.5']];
      vs = vs.map(([a,b,c,d]) => {[a,b,c,d,parseFloat(c) * parseFloat(d)]});
      ns.forEach((n, i) => {
        let sh = ss.getSheetByName(n);
        let col1 = sh.getRange("A1:A" + sh.getLastRow()).getValues().flat();
        let nr = col1.indexOf("MATERIAL") + 1;
        sh.insertRowBefore(nr);
        sh.getRange(nr, 1, 1, vs[i].length ).setValues([vs[i]]);
      });
    }