简体   繁体   中英

Set values from different sheets to another sheet

In summary, I'm trying to simplify this function that load values from two different sheets to another sheet.

All the values are stored in rows in two sheets (DBClienti and DataBkp), all these rows have a reference cell with a unique ID. I select an ID from DBClienti and the function find the relative row number, corresponding to the data to load in the last sheet (Quota). I'm setting this data using all those vars, but of course there is a better (and right) way that I don't know.

function loadDataBkp() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetQuota = ss.getSheetByName('Quota');
  const sheetDBClienti = ss.getSheetByName("DBClienti");
  const sheetDataBkp = ss.getSheetByName("DataBkp");

  //Reset Inputs
  resetQuota();

  //Select the ID DOC
  var selectedIDDoc = sheetDBClienti.getActiveCell();
  var selectedIDDocVal = selectedIDDoc.getValue();

  //Find row of ID DOC in DBClienti
  var rowDBClienti;
  const dataDBClienti = sheetDBClienti.getDataRange().getValues();
  for(var i = 0; i<dataDBClienti.length;i++){
    if(dataDBClienti[i][9] == selectedIDDocVal){
      rowDBClienti = i+1;
    }
  }
  
  //Set values in Quota - list
  var valI4 = sheetDBClienti.getRange(rowDBClienti,1).getValue();
  var valI5 = sheetDBClienti.getRange(rowDBClienti,2).getValue();
  var valI6 = sheetDBClienti.getRange(rowDBClienti,3).getValue();
  var valI7 = sheetDBClienti.getRange(rowDBClienti,4).getValue();
  var valI8 = sheetDBClienti.getRange(rowDBClienti,5).getValue();
  var valI9 = sheetDBClienti.getRange(rowDBClienti,6).getValue();
  var valI10 = sheetDBClienti.getRange(rowDBClienti,7).getValue();
  var valI11 = sheetDBClienti.getRange(rowDBClienti,8).getValue();
  sheetQuota.getRange('I4').setValue(valI4);
  sheetQuota.getRange('I5').setValue(valI5);
  sheetQuota.getRange('I6').setValue(valI6);
  sheetQuota.getRange('I7').setValue(valI7);
  sheetQuota.getRange('I8').setValue(valI8);
  sheetQuota.getRange('I9').setValue(valI9);
  sheetQuota.getRange('I10').setValue(valI10);
  sheetQuota.getRange('I11').setValue(valI11);
 
  //Find row of ID DOC in DataBkp
  var rowDataBkp;
  const dataDataBkp = sheetDataBkp.getDataRange().getValues();
  for(var i = 0; i<dataDataBkp.length;i++){
    if(dataDataBkp[i][0] == selectedIDDocVal){
      rowDataBkp = i+1;
    }
  }

  //Set values in Quota - sections
  var valC2 = sheetDataBkp.getRange(rowDataBkp,2).getValue();
  var valC4 = sheetDataBkp.getRange(rowDataBkp,3).getValue();
  var valC5 = sheetDataBkp.getRange(rowDataBkp,4).getValue();
  var valC6 = sheetDataBkp.getRange(rowDataBkp,5).getValue();
  var valC7 = sheetDataBkp.getRange(rowDataBkp,6).getValue();
  var valC8 = sheetDataBkp.getRange(rowDataBkp,7).getValue();
  var valC9 = sheetDataBkp.getRange(rowDataBkp,8).getValue();
  var valC10 = sheetDataBkp.getRange(rowDataBkp,9).getValue();
  var valC11 = sheetDataBkp.getRange(rowDataBkp,10).getValue();
  var valC12 = sheetDataBkp.getRange(rowDataBkp,11).getValue();
  var valF4 = sheetDataBkp.getRange(rowDataBkp,12).getValue();
  var valF5 = sheetDataBkp.getRange(rowDataBkp,13).getValue();
  var valF8 = sheetDataBkp.getRange(rowDataBkp,14).getValue();
  var valF9 = sheetDataBkp.getRange(rowDataBkp,15).getValue();
  var valF12 = sheetDataBkp.getRange(rowDataBkp,16).getValue();
  var valF13 = sheetDataBkp.getRange(rowDataBkp,17).getValue();
  var valF25 = sheetDataBkp.getRange(rowDataBkp,18).getValue();
  var valF26 = sheetDataBkp.getRange(rowDataBkp,19).getValue();
  var valF27 = sheetDataBkp.getRange(rowDataBkp,20).getValue();
  var valI14 = sheetDataBkp.getRange(rowDataBkp,21).getValue();
  
  sheetQuota.getRange('C2').setValue(valC2);
  sheetQuota.getRange('C4').setValue(valC4);
  sheetQuota.getRange('C5').setValue(valC5);
  sheetQuota.getRange('C6').setValue(valC6);
  sheetQuota.getRange('C7').setValue(valC7);
  sheetQuota.getRange('C8').setValue(valC8);
  sheetQuota.getRange('C9').setValue(valC9);
  sheetQuota.getRange('C10').setValue(valC10);
  sheetQuota.getRange('C11').setValue(valC11);
  sheetQuota.getRange('C12').setValue(valC12);
  sheetQuota.getRange('F4').setValue(valF4);
  sheetQuota.getRange('F5').setValue(valF5);
  sheetQuota.getRange('F8').setValue(valF8);
  sheetQuota.getRange('F9').setValue(valF9);
  sheetQuota.getRange('F12').setValue(valF12);
  sheetQuota.getRange('F13').setValue(valF13);
  sheetQuota.getRange('F25').setValue(valF25);
  sheetQuota.getRange('F26').setValue(valF26);
  sheetQuota.getRange('F27').setValue(valF27);
  sheetQuota.getRange('I14').setValue(valI14);
}

Try it this way:

function loadDataBkp() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh1 = ss.getSheetByName('Quota');
  const sh2 = ss.getSheetByName("DBClienti");
  const sh3 = ss.getSheetByName("DataBkp");
  resetQuota();
  var v2 = sh2.getActiveCell().getValue();
  var row1;
  sh2.getDataRange().getValues().forEach((r,i) => { if (r[9] == v2) { row1 = i + 1; } })
  sh1.getRange(4, 9, 8).setValues(sh2.getRange(row1, 1, 1, 8).getValues().flat().map(v => [v]))
  var row2;
  const vs3 = sh3.getDataRange().getValues().forEach((r, i) => { if (r[0] == v2) { row2 = i + 1 } })
  let xvs = sh3.getRange(row2, 2, 1, 20).getValues().flat();
  ['C2', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'F4', 'F5', 'F8', 'F9', 'F12', 'F13', 'F25', 'F26', 'F27', 'I14'].forEach((s, i) => { sh1.getRange(s).setValue(xvs[i]) });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM