Split single rows into multiple rows depending on whether one cell has values seperated by commas or new lines - Google spreadsheet -


the spreadsheet has cells cell contents separated commas, or new line.

123, 876, 456

column "c" column determines whether row should split multiple rows.

example spreadsheet

information form goes "form submission" page.

we have specific format must meet submit our report tracking software requires issue numbers (found in column c) separated own rows information found in columns a:b, d:j remaining same (see desired outcome sheet).

i found similar question (link similar question), , implemented our google sheet.

this script requires, on separate sheet, function "=result('formsubmission'!a2:j) placed in first column / row wish data displayed (see "current outcome" sheet, cell a2.)

here coding using:

function result(range) {   var output2 = [];   for(var = 0, ilen = range.length; < ilen; i++) {     var s = range[i][2].split("\n");         for(var j = 0*/, jlen = s.length; j < jlen; j++) {       var output1 = [];        for(var k = 0, klen = range[0].length; k < klen; k++) {         if(k == 2) {           output1.push(s[j]);         } else {           output1.push(range[i][k]);         }       }       output2.push(output1);     }       }   return output2; }   function results(range) {   var output2 = [];   for(var = 0 /, ilen = range.length; < ilen; i++) {     var s = range[i][2].split(",");         for(var j = 0 /, jlen = s.length; j < jlen; j++) {       var output1 = []/;        for(var k = 0, klen = range[0].length; k < klen; k++) {         if(k == 2 /) {           output1.push(s[j]);         } else {           output1.push(range[i][k]);         }       }       output2.push(output1);     }       }   return output2; }  

if submits multiple issue numbers separated commas in form, row needs split multiple rows, shown in desired outcome sheet.

here code tested, , works. works cells have both new lines, , comma separated values. not required range passed in. . . . . . don't need code. writes new rows directly 'current outcome' sheet.

function result() {   var ss = spreadsheetapp.getactivespreadsheet();   var frmsubmissionsheet = ss.getsheetbyname('form submission');   var desiredoutcomesheet = ss.getsheetbyname('current outcome');    var data = frmsubmissionsheet.getrange(1, 1, frmsubmissionsheet.getlastrow(), frmsubmissionsheet.getlastcolumn()).getvalues();    var issuenumbers = "",       hascomma = false,       arrayofissuenumbers = [],       arrayrowdata = [],       thisrowdata,       hasnewline;    (var i=0;i<data.length;i+=1) {     if (i===0) {continue}; //skip row 1      issuenumbers = data[i][2];     hascomma = issuenumbers.indexof(",") !== -1;     hasnewline = issuenumbers.indexof("\n") !== -1;     logger.log(hasnewline)     if (!hascomma && !hasnewline) {       desiredoutcomesheet.appendrow(data[i]);       continue;  //continue next loop, there no multiple issue numbers     };      if (hasnewline) {       var arraynewnewline = issuenumbers.split("\n");//get rid of new line       issuenumbers = arraynewnewline.tostring(); //back string.  handles cells both new line , commas     };      arrayofissuenumbers = [];     arrayofissuenumbers = issuenumbers.split(",");      (var j=0;j<arrayofissuenumbers.length;j+=1) {       arrayrowdata = []; //reset       thisrowdata = [];        thisrowdata = data[i];       (var k=0;k<thisrowdata.length;k+=1) {         arrayrowdata.push(thisrowdata[k]);       };        arrayrowdata.splice(2, 1, arrayofissuenumbers[j]);       desiredoutcomesheet.appendrow(arrayrowdata);     };   }; }; 

Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -