1

私はこれらの2つのリンクGoogleScriptを読みました:条件付きで1つのスプレッドシートから別のスプレッドシートhttps://stackoverflow.com/a/4809413/1526044に行をコピーし、試した後、必要なことを実行できません。

この方法で比較するために、1つのシートにいくつかのデータを含む1つのスプレッドシートと、列に重要な情報を含む別のシートがあります。

KEY Value1 Value2 Value3 
AAA   B      C      D
BBB   Y      Z      W

キーシートの列の値を探すために、DATAスプレッドシートを行ごとにチェックする関数が必要です。そして、値のいずれかが見つかると、DATAスプレッドシートの最初の列(同じ行)にKEY値を書き留めます。

例:DATAスプレッドシート

empty text text text B
empty text text text text
empty text   C  text text
empty text text text Y

したがって、スクリプトの後、DATAは次のようになります。

AAA text text text B
empty text text text text
AAA text   C  text text
BBB text text text Y

これを行うための他の提案はありがたいです。

4

1 に答える 1

1

最近回答した同様のスクリプトを修正しました。これは、必要なことを行うはずです。私はテストしていませんが、試してみてください。アイデアを説明するコメントがいくつかあります...おそらくデバッグが必要です。

編集:私はこれをいじって、もう少しデバッグしました;-)今は必要に応じて動作するようです-ここに私のテストシートへのリンクがあります

function xxx(){ 
/* we have an array 'keysheet'
    and an array datasheet , you get these with something like*/
        var keysheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
    // and
        var datasheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
    // the iteration could be like this :
              for(i=0;i<datasheet.length;++i){ // don't miss any data
                for(j=0;j<keysheet.length;++j){ // iterate through keysheet to find the keys
                  for(k=1;k<keysheet[0].length;++k){ // iterate in keysheet row to check every column except first one
                      var key = keysheet[j][k]
                      Logger.log(k+' '+key+"  "+datasheet[i].toString().match(key))
                 if(datasheet[i].toString().match(key) == key){// check whole rows to find if key is in data
                  var x = datasheet[i].shift();
                   datasheet[i].unshift(keysheet[j][0]) // if match found, replace first element in datasheet with fisrt element in keysheet
                     break  // if found break k loop maybe you should also break j loop ?
                       }
                 }
                   } //loop keysheet
             } // loop datasheet

            /* now you have a modified datasheet array that can directly overwrite the old datasheet 
            using setValues() */
            var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the datasheet sheet is sheet nr2
            Logger.log(datasheet)
           sh.getRange(1,1,datasheet.length,datasheet[0].length).setValues(datasheet);
              }
        //
于 2012-07-15T20:37:44.680 に答える