2

我正在尝试创建一个脚本以在 Google 电子表格中运行,该脚本将扫描一个电子表格中的表格,找到与我的 IF 匹配的每一行,然后只将那些匹配的行写入另一个电子表格。我对脚本完全陌生,但已经拼凑了一些东西。究竟是什么,我不确定。这是一个笨拙的混乱,但我觉得它接近工作。

我遇到的问题:(除了不知道一点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 回答