In a spreadsheet, I have a tab “CUSTOMERS” with values in the range B4:Q,. These values are imported from another spreadsheet with importrange.
In C4:C of “CLIENTS”, there are the names of 3 products which correspond to the names of 3 other tabs (“DATA”, “EPHAD”, “LIVRET”) which have the same column format as the tab “CLIENTS”.
What I would like to do is to copy all the values from the range B4:Q of “CLIENTS” and paste them into the tabs that correspond to the product (DATA rows in the DATA tab, EPHAD in the EPHAD tab and LIVRET tab in LIVRET).
I don’t just import via FILTER, QUERY or another function because I need the imported content to be editable.
Here is my sheet (the tab “SOURCE IMPORTRANGE” is not there on the original table. I simply inserted the values from the source file into it).
I tried to write a script but I can’t get it to work properly. Here is the script:
function UpdateClients() { var sss = SpreadsheetApp.openById('1NTSTb8MlLyncgaEAPY5GwEeRY0qGy7B8UbuzjpiXZEI'); var sourceValues = sss.getSheetByName("CLIENTS").getDataRange().getValues(); try{ //DATA var tdata = sourceValues.filter(function (row) { return row[2] == "DATA"; }); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DATA") ss.getRange(4,2, 900, 17).clearContent() ss.getRange(4, 2, tdata.length,17).setValues(tdata); } catch(e){console.log(e)} try{ //EPHAD var tephad = sourceValues.filter(function (row) { return row[2] == "EPHAD"; }); ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EPHAD") ss.getRange(4,2, 900, 17).clearContent() ss.getRange(4, 2, tephad.length,17).setValues(tephad); } catch(e){console.log(e)} try{ //LIVRET var tlivret = sourceValues.filter(function (row) { return row[2] == "LIVRET"; }); ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIVRET") ss.getRange(4,2, 900, 17).clearContent() ss.getRange(4, 2, tlivret.length,17).setValues(tlivret); } catch(e){console.log(e)} }
Advertisement
Answer
Distributing Rows to sheets named in Column C
function updateClients() { const sss = SpreadsheetApp.openById('id'); const sh = sss.getSheetByName("CLIENTS"); const vs = sh.getRange("B4:Q" + getColumnHeight(2,sh,sss)).getValues(); const ss = SpreadsheetApp.getActive(); const csh = ss.getSheetByName("COMMENTAIRES"); csh.getRange(4,2,csh.getLastRow() - 3,csh.getLastColumn() - 1).clearContent(); csh.getRange(4,2,vs.length,vs[0].length).setValues(vs); let oObj = { sA: [] };//collects rows into 2D arrays vs.forEach((r, i) => { if (!oObj.hasOwnProperty(r[1])) { oObj.sA.push(r[1]); oObj[r[1]] = []; oObj[r[1]].push(r); } else { oObj[r[1]].push(r) } }); oObj.sA.forEach(n => { let sh = ss.getSheetByName(n); if (sh.getLastRow() > 3) { sh.getRange(4, 2, sh.getLastRow() - 3, sh.getLastColumn() - 1).clearContent(); } sh.getRange(4, 2, oObj[n].length, oObj[n][0].length).setValues(oObj[n]);//outputting 2d arrays from oObj }); } function getColumnHeight(col, sh, ss) { var ss = ss || SpreadsheetApp.getActive(); var sh = sh || ss.getActiveSheet(); var col = col || sh.getActiveCell().getColumn(); var rcA = []; if (sh.getLastRow()){ rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse(); } let s = 0; for (let i = 0; i < rcA.length; i++) { if (rcA[i].toString().length == 0) { s++; } else { break; } } return rcA.length - s; }