1

複数のタブを持つスプレッドシートを作成しました。

My'Source'Tab1には列'Id'と'Name'My'Target'Tab2には'Id'が含まれています

[ターゲット]タブの行を繰り返し処理してIDの値を読み取り、[ソース]タブでIDを検索しようとしています。IDを見つけたら、[名前]フィールドの値を取得して、[ターゲット]タブのIDと同じ行のセルに追加します。

1つの配列を反復処理し、[ターゲット]タブまたは[ターゲットタブ]コンテンツの配列のいずれかで値を確実に見つけるというロジックを実行するのに苦労しています。[ターゲット]タブで、IDが複数回発生する可能性があるため、それらすべてを更新する必要があります。

どんな提案でも大歓迎です!

4

1 に答える 1

2

ここに提案があります:

/* let us say source array with name(columnA) & ID(columnB) is array 'source'
and target array with only IDs is array 'target', you get these with something like*/
    var source = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
// and
    var target = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
//   then let's create a 3 rd array that will be the new target with ID + names, and call it 'newtarget' 
    var newtarget=new Array()
// the iteration could be like this :
          for(i=0;i<target.length;++i){ // don't miss any ID
           for(j=0;j<source.length;++j){ // iterate through source to find the name

             if(target[i][0].toString().match(source[j][1].toString()) == source[j][1].toString()){
               var newtargetrow=[source[j][0],target[i][0]] // if match found, store it with name (idx0) and ID (idx 1)
                   }else{
               var newtargetrow=['no name found',target[i][0]] // if no match, show it in name column
                   }
             newtarget.push(newtargetrow);// store result in new array with 2 columns
               } //loop source
         } // loop target

        /* now you have a newtarget array that can directly overwrite the old target 
        using setValues() */
        var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the target sheet is sheet nr2
        sh.getRange(1,1,newtarget.length,newtarget[0].length).setValues(newtarget);
    //

このコードはテストしていませんが、出発点になるはずです。.matchを使用して文字列を比較しましたが、他の比較(配列要素間の直接等価)を使用することもできます...シートデータに不要なスペースが含まれるリスクがある場合は、IDのスペースを削除することもできます...私はしませんあなたのデータを知っているので、それはあなた次第です。

于 2012-07-12T01:00:05.397 に答える