2017-09-09 3 views
-1

J'ai donc environ 2000 entrées dans un tableur avec des données sur certaines entreprises. Les données sont organisées comme suit:Codage pour organiser les données

Nom de l'entreprise: ...
Email: .......
Téléphone: .....
Web: ....
Adresse:. ...

nom de l'entreprise: ...
Email: ...
téléphone: ...
etc

ce que je veux est d'écrire une fonction qui organizez ceci dans une autre feuille de calcul sous les colonnes

Nom de l'entreprise         Email         Numéro de téléphone         Web
......... .........

J'ai écrit l'intro à la fonction

function OrganizeData() 
{var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orginial"); 
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Organized"); 

mais je ne sais pas comment écrire un code qui copie du texte après un certain keywo rd (e-mail) d'une ligne d'une feuille de calcul à une autre colonne de la feuille de calcul 2.

+2

Vous devez diviser par ':' et utiliser regex et transposer En l'état actuel, votre question est trop large et il est peu probable que vous receviez des réponses.Et le format des données que vous avez données est trop vague pour donner une solution Proposez vos données avec une capture d'écran et une feuille fictive avec la position exacte de ':', ',', espaces entre les caractères, nombre de mots, si la position de toutes les données est dans la même cellule (A) colonnes, S'il y a une fin de chaîne, toutes les données contiennent-elles des numéros de téléphone? Y aura-t-il toujours une rangée vide entre l'adresse et le nom de l'entreprise suivante? etc.. –

+0

Pourriez-vous nous donner un échantillon représentatif des données dans la feuille originale afin que nous ayons quelque chose à tester? – Cooper

Répondre

0

Il s'agit en quelque sorte d'une supposition, mais convertit les données positionnées verticalement en colonnes.

function testGetData() 
{ 
    getData('SpreadSheetID','Sheet1','Sheet2'); 
} 

function getData(spreadsheetId,inputSheetName,outputSheetName) 
{ 
    var ss=SpreadsheetApp.openById(spreadsheetId); 
    var inpsh=ss.getSheetByName(inputSheetName); 
    var outsh=ss.getSheetByName(outputSheetName); 
    var inrg=inpsh.getDataRange(); 
    var invA=inrg.getValues(); 
    var outA=[]; 
    var n=0; 
    outA.push(['Name','Email','Phone','Web','Address','Error']); 
    var row=[]; 
    for(var i=0;i<invA.length;i++) 
    { 
    var vA=[]; 
    vA=String(invA[i][0]).split(':');//assuming data is in one string 
    if(vA.length<2)//assuming data is split into first two columns with no : in the string 
    { 
     vA.push(invA[i][1]); 
    } 
    switch(vA[0]) 
    { 
     case 'Company name': 
     row['Name']=String(vA[1]).trim();//trim off whitespace both ends 
     break; 
     case 'Email': 
     row['Email']=String(vA[1]).trim(); 
     break 
     case 'Phone no': 
     row['Phone']=String(vA[1]).trim(); 
     break; 
     case 'Web': 
     row['Web']=String(vA[1]).trim(); 
     break; 
     case 'address': 
     row['Address']=String(vA[1]).trim(); 
     outA.push([(typeof(row.Name)!='undefined')?row.Name:'',(typeof(row.Email)!='undefined')?row.Email:'',(typeof(row.Phone)!='undefined')?row.Phone:'',(typeof(row.Web)!='undefined')?row.Web:'',(typeof(row.Address)!='undefined')?row.Address:'',(typeof(row.Error)!='undefined')?row.Error:'']); 
     break; 
     default: 
     row['Error']=Utilities.formatString('Row Error: Index: %s vA[0]= %s vA[1]= %s',i,(typeof(vA[0])!='undefined')?vA[0]:'Not Defined',(typeof(vA[1])!='undefined')?vA[1]:'Not Defined'); 
     break; 
    } 
    } 
    var otrg=outsh.getRange(1,1,outA.length,outA[0].length);//determine size of output array Its good to have headers for this 
    otrg.setValues(outA); 
} 

Fiche de données Mes tests:

enter image description here

Fiche de sortie:

enter image description here

erreurs: indiquer des problèmes avec les lignes antérieures de données.

Nous avons apporté quelques modifications pour réduire les risques de problèmes.

function getData(spreadsheetId,inputSheetName,outputSheetName) 
{ 
    var ss=SpreadsheetApp.openById(spreadsheetId); 
    var inpsh=ss.getSheetByName(inputSheetName); 
    var outsh=ss.getSheetByName(outputSheetName); 
    var inrg=inpsh.getDataRange(); 
    var invA=inrg.getValues(); 
    var outA=[]; 
    var n=0; 
    outA.push(['Name','Email','Phone','Web','Address','Error']); 
    var row=[]; 
    for(var i=0;i<invA.length;i++) 
    { 
    var vA=[]; 
    vA=String(invA[i][0]).split(':');//assuming data is in one string 
    if(vA.length<2)//assuming data is split into first two columns with no : in the string 
    { 
     vA.push(invA[i][1]); 
    } 
    switch(vA[0]) 
    { 
     case 'Company name': 
     row['Name']=String(vA[1]).trim();//trim off whitespace both ends 
     break; 
     case 'Email': 
     row['Email']=String(vA[1]).trim(); 
     break 
     case 'Phone no': 
     row['Phone']=String(vA[1]).trim(); 
     break; 
     case 'Web': 
     row['Web']=String(vA[1]).trim(); 
     break; 
     case 'address': 
     row['Address']=String(vA[1]).trim(); 
     outA.push([(typeof(row.Name)!='undefined')?row.Name:'',(typeof(row.Email)!='undefined')?row.Email:'',(typeof(row.Phone)!='undefined')?row.Phone:'',(typeof(row.Web)!='undefined')?row.Web:'',(typeof(row.Address)!='undefined')?row.Address:'',(typeof(row.Error)!='undefined')?row.Error:'']); 
     row['Name']='';//cleared out the row array 
     row['Email']=''; 
     row['Phone']=''; 
     row['Address']=''; 
     row['Error']=''; 
     break; 
     default: 
     row['Error']=Utilities.formatString('Row Error: Index: %s vA[0]= %s vA[1]= %s',i,(typeof(vA[0])!='undefined')?vA[0]:'Not Defined',(typeof(vA[1])!='undefined')?vA[1]:'Not Defined'); 
     outA.push(['','','','','',row.Error]);//output errors on separate lines 
     row['Error']='';//cleared errors 
     break; 
    } 
    } 
    var otrg=outsh.getRange(1,1,outA.length,outA[0].length);//determine size of output array Its good to have headers for this 
    otrg.setValues(outA); 
} 

données modifiées pour avoir quelques différences:

enter image description here

Et voici la nouvelle sortie

enter image description here