2017-09-09 10 views
-1

私はスプレッドシートに約2000件のエントリがあり、いくつかの会社に関するデータがあります。データをコーディングして整理する

会社名:...
メールアドレス:.......
電話番号:.....
ウェブ:....
アドレス:それは次のようにデータが編成されています。 ...

会社名:...
Eメール:...
電話番号:...
など

私が欲しいものは、列の下に別のスプレッドシートでこれをorganizez関数を記述することである

会社名       メール       電話番号       ウェブ
.........
.........

私はイントロを書きました関数へ

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

しかし、私はどのように特定のkeywoの後にテキストをコピーするコードを書くか分からないスプレッドシートのある行からスプレッドシート2の別の列にrd(電子メール)を送信します。

+2

ですあなたの質問はあまりにも広すぎ、答えを受け取ることはまずありません。あなたが与えたデータの形式はあまりにも漠然としています文字の間のスペース、単語の数、すべてのデータの位置が同じセルにあるのか(A列)、または異なるセルにまたがっているのかなど、スクリーンショットとダミーシートでデータを提供する列、文字列の最後かどうか、すべてのデータに電話番号が含まれていますか?アドレスと次の会社名の間には常に空白行がありますか?等々.. –

+0

元のシートのデータの代表サンプルを教えてください。テストするものがあります。 – Cooper

答えて

0

これは多少の推測ですが、垂直方向に配置されたデータを列に変換します。

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); 
} 

私のテストデータシート:

enter image description here

出力用紙:

enter image description here

エラー:データの前の行に問題があることを示します。

問題を起こす可能性を少し低くするためにいくつかの変更を加えました。

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); 
} 

は、いくつかの違いを持っ​​ているデータを修正: `と正規表現を使用して、移調:

enter image description here

そして、ここでは、新しい出力はあなたが`によって分割する必要があります

enter image description here

関連する問題