2

あるスプレッドシートでシートをスキャンし、IF に一致するすべての行を見つけて、一致する行のみを別のスプレッドシートに書き込む Google スプレッドシートで実行するスクリプトを作成しようとしています。私はスクリプトにまったく慣れていませんが、何かをつなぎ合わせました。正確にはわかりません。それはぎこちない混乱ですが、私はそれが機能することに近づいているように感じます.

私が遭遇する問題:(JavaScriptのなめを知らないことを超えて):

ソースシートの全範囲を検索しているとは思えません。最初の真の条件を見つけて、それをターゲット シートに書き込み続けます。以上。オーバー。オーバー。

以下を使用して同様の結果が得られました。

for(n=0;n<data.length;++n){ 
if (data[n][13]=="yes"&&data[n][16]!="yes"){ ;
target.push(data[n]);

最終的には、いくつかの重複するチェックと関数を書きたいと思っていますが、その本質を解決したいと考えています。

肉:

function test() {
  var source = SpreadsheetApp.openById("0A....nc");
  var sh = source.getSheetByName("NA");
  var data=sh.getDataRange().getValues()

  var target=new Array();
  for(i=0;i<data.length;++i){ 
  for (j=0;j<data[i].length;++j){
    if (data[i][13]=="yes"&&data[i][16]==""){ ;
      target.push(data[i]);
}
}
if(target.length>0){
  var ss = SpreadsheetApp.openById("0A....Gc");   
  var sh2=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet5")); 
  var xx = sh2.getLastRow();
  sh2.getRange(xx+1,1,target.length,target[0].length).setValues(target);
  }
}
}

誰でも提供できる助けをありがとう!

編集:私が望むように何かを動作させることができました。

function testtest() {
  var source = SpreadsheetApp.openById("0A....Wc");
  var sh = source.getSheetByName("Sheet1");
  var data = sh.getDataRange().getValues()
  var ss = SpreadsheetApp.openById("0A....mc");   
  var sh2 = ss.getSheetByName("Sheet1"); 
  var xx = sh2.getLastRow();


  var target=new Array();
  for(i=0;i<data.length;++i){ 
    if (((data[i][13]=='yes')||(data[i][13]=='YES')||(data[i][13]=='Yes')) && !((data[i][16]=='yes')||(data[i][16]=='YES')||(data[i][16]=='Yes'))){
      target.push(data[i]);}

}

   var newData=new Array();
   for(i in target){
    var sh2D = sh2.getDataRange().getValues();
    var row = target[i];
    var duplicate = false;
    for(j in sh2D){
      if(row.join() == sh2D[j].join()){
        duplicate = true;
      }
     }
     if(!duplicate){
       newData.push(row);
    }
  }

   if(newData.length>0){ 

   var dest = sh2.getRange(xx+1,1,newData.length,newData[0].length);
      dest.setValues(newData);
   }
}

はい、ずさんです。現在、新しいターゲット シートのセルを更新し、その変更をマスター リストに変換できるように取り組んでいます。実際には、作業が完了したときに列に「はい」を追加してから、マスターを更新します (25 人以上の人によって常に並べ替えられるシートで)。

ああ、大文字と小文字や余分なスペースに関係なく「はい」を検索する方法を誰かが知っていれば、IF 行をクリーンアップするのに役立ちます。

4

1 に答える 1

1

ああ、大文字と小文字や余分なスペースに関係なく「はい」を検索する方法を誰かが知っていれば、IF 行をクリーンアップするのに役立ちます。

あなたが言ったことをするだけです...大文字の値を比較し、空白を削除します。

if ((data[i][13].trim().toUpperCase() === 'YES') && (data[i][16].trim().toUpperCase() != 'YES')) {
  ...

これを頻繁に行う必要がある場合は、ヘルパー関数を作成します。

/**
 * Perform case-insensitive, trimmed comparison of two strings.
 * Returns true if strings are nominally equal.
 */
function strEqual(str1, str2) {
  var one = str1.trim().toUpperCase();
  var two = str2.trim().toUpperCase();
  return one === two;
}

次に、これを行うことができます:

if (strEqual(data[i][13],'yes') && !strEqual(data[i][16],'YeS')) {
  ...
于 2013-07-31T17:01:11.657 に答える