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:
Fiche de sortie:
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:
Et voici la nouvelle sortie
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.. –
Pourriez-vous nous donner un échantillon représentatif des données dans la feuille originale afin que nous ayons quelque chose à tester? – Cooper