これは多少の推測ですが、垂直方向に配置されたデータを列に変換します。
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);
}
私のテストデータシート:
出力用紙:
エラー:データの前の行に問題があることを示します。
問題を起こす可能性を少し低くするためにいくつかの変更を加えました。
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);
}
は、いくつかの違いを持っているデータを修正: `と正規表現を使用して、移調:
そして、ここでは、新しい出力はあなたが`によって分割する必要があります
ですあなたの質問はあまりにも広すぎ、答えを受け取ることはまずありません。あなたが与えたデータの形式はあまりにも漠然としています文字の間のスペース、単語の数、すべてのデータの位置が同じセルにあるのか(A列)、または異なるセルにまたがっているのかなど、スクリーンショットとダミーシートでデータを提供する列、文字列の最後かどうか、すべてのデータに電話番号が含まれていますか?アドレスと次の会社名の間には常に空白行がありますか?等々.. –
元のシートのデータの代表サンプルを教えてください。テストするものがあります。 – Cooper