2017-02-21 9 views
0

私はこのコードをSheet1のSheet2のSheet2のSheet3から配列を取得するためのGoogleスクリプトに用意しています。しかし、今は配列は他の配列の下に1つだけ配置されています。私が必要とするのは、新しいスプレッドシートの例のように、次の5列に 'v'の新しい配列を配置することです。複数配列を横に並べてGoogleスクリプト

2番目に - これの前に、私は*や?のようなワイルドカードを使用できる検索式のフィルタを使用しました。私は新しい機能でワイルドカードや正規表現をどのように使うことができますか?

私は何か助けに感謝します。

function getval(){ 

     var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
     var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); 
     var sspodbor = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3"); 

     var range = ss.getRange("A2:A29"); 
     var values = range.getValues(); 

     var rangez = sheet.getRange("A1:A14"); 
     var valuesz = rangez.getValues(); 

     var z = [] 
     for (var x = 0; x<valuesz.length; x++){ 
     z.push(valuesz[x]) 
     } 

     var v = []; 
     for (var q = 0; q < valuesz.length; q++){ 
     for (var s = 0; s < values.length; s++){ 
      if(values[s][5] == z[q]){ 
      v.push([values[s][0],values[s][1],values[s][2],values[s][3],values[s][4]]); 
      } 
//I am guessing that here must be a separating function  
     } 
     } 
     var range = sspodbor.getRange(4, 1, v.length,v[0].length); 
     range.setValues(v); 
    } 

マイスプレッドシート:https://docs.google.com/spreadsheets/d/1o7ErbeFHA7yyxMC0HMn3Uj5ZBRcy2uAwa1UpolVpBFI/edit?usp=sharing

+1

小さなもののカップル:最初のvar range = ss.getRange( "A2:A29");おそらくvar range = ss.getRange( "A2:F29")にする必要があります。第2に、var z = []はvar z = []でなければなりません。しかし、私の大きな疑問は、どのようにグループ化しているかです。 Sheet2には14の値しかありません。したがってqの14の値だけですが、あなたの例では16の列を表示します。だから、どうグループ化しているのですか? – Cooper

+0

こんにちは、@クーパー!あなたが見たように、私は以前の答えからあなたの配列について何かを学んだ!私は非常に単純な方法でそれらをグループ化しました:q varとループでは、rangezから1つのセルを取ります。次にvarでループします。値の範囲の値が等しいかどうかをチェックします。そして次のq varを取ったとき、同じ値を0-4から次の列にプッシュする必要があります – Davagaz

+0

ここでq値を含めてしまいました。if(values1 [s] [5] == z [q]){v .push([values1 [s] [0]、values1 [s] [1]、values1 [s] [2]、values1 [s] [3]、values1 [s] [4]、q]);}あなたの出力データは各グループに共通するように見えます。 – Cooper

答えて

1

は、それはあなたが表示されますし、うまくいけば他の人がそれを上に見て、改善を行うが、ここで、それはあるだろうきれいな解決策ではありません水平

をグループを広げます。

function getval() 
{ 
    var Sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
    var Sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); 
    var output = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("output"); 
    var knew = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('knew'); 
    var knewrange = knew.getRange(1,1,10,100); 
    var pipe = ''; 

    var range1 = Sheet1.getRange("A2:F29"); 
    var values1 = range1.getValues(); 

    var range2 = Sheet2.getRange("A1:A14"); 
    var values2 = range2.getValues(); 

    var z = []; 
    for (var x = 0; x<values2.length; x++) 
    { 
    z.push(values2[x]) 
    } 
    var v = []; 
    for (var q = 0; q < values2.length; q++) 
    { 
    for (var s = 0; s < values1.length; s++) 
    { 
     if(values1[s][5] == z[q]) 
     { 
     v.push([values1[s][0],values1[s][1],values1[s][2],values1[s][3],values1[s][4],q]); 
     } 
    } 
    } 
    var vlength=v.length; 
    var range3 = output.getRange(1, 1, v.length,6); 
    range3.setValues(v); 

    var w = []; 
    var voff = 0; 
    var hoff = 0; 
    for(var m=0;m<10;m++) 
    { 
    w[m]=[]; 
    for(var n=0;n<100;n++) 
    { 
     w[m][n]='' ; 
    } 
    } 
    var color = ['yellow','orange']; 
    for(var i=0;i<v.length;i++) 
    { 
    for(var j=0;j<5;j++) 
    { 

     if(i-voff==0){knew.getRange((i-voff + 1),(j + hoff + 1),4,5).setBackground(color[v[i][5] % 2])}; 
     if((i-voff)==0 || v[i][5] == v[i-1][5]) 
     { 
     w[i - voff][j + hoff]=v[i][j]; 
     } 
     else 
     { 
     voff = i; 
     hoff += 5; 
     w[i - voff][j + hoff]=v[i][j]; 
     } 
    } 
    } 
    knewrange.setValues(w); 
} 

私はスプレッドシートのデータと元のgetval関数をコピーしました。私はいくつかの名前を変更してしまったので、データを見つけやすい場所を見つけ出すことができました。私と私が楽しんだのは難しい問題でした。 ありがとう

+0

ねえ、クーパー!あなたの答えをチェックしてください - それはうまくいく、それは私が理解しなければならない私に新しい機能と演算子をたくさん持っています。あなたの答えを見ると、 "q"ループでSetValueを移動し、別の配列を追加し、(q + 1)* 5の代わりにcolumt number 1を設定すれば十分であることに気付きました。そのとてもシンプルな、ありがとう! – Davagaz

+0

はいqをデータセットに追加することで、q [i]!== q [i = 1]のときにグループ変換を行い、w配列を作成してディメンションに初期化することができました私が必要とする以上の大きさのため、常に寸法誤差を避けることができます。しかし、ループの内部で大きな配列を更新すると、多くのリソースが消費されるため、スクリーンをリフレッシュしても何が起きているか把握するのに役立ちますので、注意が必要です。おそらく、最大グループサイズでグループの数をw 5 *のサイズにすることができます。 – Cooper

関連する問題