获取第一行,其中ColA =名称,ColB = SecondName和ColC = null(为空)

时间:2019-05-10 01:44:33

标签: javascript google-apps-script

我对JavaScript非常陌生,请耐心等待。我想要一个公式,该公式在多个列中搜索指定的值,而不是在所有列中都使用相同的值。例如:ColA = James,ColB = Smith,ColE =“”(cellisempty)对吗? 一旦找到具有该条件的第一行,它就会将该行用于另一个公式,如果您好奇,我将制作setValue(ColE + gotRow, new Date())我正在制作一个Time in / Time Out Sheet。 “想法”功能用于搜索某人的姓名,并搜索下一个可用空间以放置时间,因为同一个人可能已经注销并多次在同一张纸上。一旦他的行上有一个空白点,它将在当前时间放置在该行上,这将使其不再为空,这意味着下一次函数运行时,它将跳过该行并转到该家伙退出的下一个行。

这是一个功能,由于一个用户,我可以尝试解决我的问题。

function getValue(cellName) {
  return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue()
}

function setValue(cellName, value) {
  SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}

function rowWhereTwoColumnsEqual(value1,col1,value2,col2) {
  var value1=value1;//testing
  var value2=value2;
  var col1=col1;//testing
  var col2=col2;//testing
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var rA=[];
  for(var i=0;i<vA.length;i++) {
    if(vA[i][col1-1]==value1 && vA[i][col2-1]==value2) {
      rA.push(i+1);
    }
  }
  Logger.log(rA.push(i+1))
  SpreadsheetApp.getUi().alert(rA.join(','));
}

我在它下面创建了一个函数,用于输入值以查看其工作原理

function getrowWhereTwoColumnsEqual(){
 rowWhereTwoColumnsEqual('James','Sheet1!A',null,'Sheet1!C')
Logger.log(rowWhereTwoColumnsEqual('Ta','Sheet1!A',null,'Sheet1!C'))
}

我制作的工作表在A1中有'James',而C1为空。它还具有其他5个充满随机名称的行。

Column A | Column B  | Column C
=================================
James    |     C     | 
Kyle     |     E     | 
Micheal  |     T     | 
Sarah    |     K     |
Tray     |     F     | 
John     |     D     | 

所以我期望得到的响应为“ 1”,因为第1行对两个都应该为true,但是我看到的是“ 7”。可能是因为第7行的所有列均为空白,所以所有列均相同。因此,我必须输入错误的值,否则方程式需要调整。就像我说的,我很新。 编辑5/9/19 20:06 再次谢谢你,库珀。您的功能运行良好。

function test() {
  findRows(1,getValue('A1'),2,getValue('B1'),3,null,'Sheet1')
  Logger.log(findRows(1,getValue('A1'),2,getValue('B1'),3,null,'Sheet1'));
}

但是,一旦我向C1添加值,就会出现logger.log []

Column A | Column B  | Column C
=================================
James    |     C     | 5/9/19
Kyle     |     E     | 
James    |     T     | 
Sarah    |     K     |
James    |     F     | 
John     |     D     | 

没有该值,我收到了[1.0,3.0,5.0],但是一旦我更改了一个值,我收到的[]就是[3.0,5.0]

修改9:00 PST 我将null更改为"",它似乎可以正常工作。

编辑9:25 PST 最终方程函数Test()是成品并成功的函数。

function getValue(cellName) {
  return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue()
}

function getValues(cellName) {
  return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValues()
}
function setValue(cellName, value) {
  SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}

function findRows(c1,n1,c2,n2,c3,n3,name) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(name);
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var rA=[];
  for(var i=0;i<vA.length;i++) {
    if(vA[i][c1-1]==n1 && vA[i][c2-1]==n2 && vA[i][c3-1]==n3) {
      rA.push(i+1);
    }
  }
  return rA
}

function test() {
  var passiveRow = findRows(1,getValue('A2'),2,getValue('B2'),3,"",'Sheet1');
  Logger.log(passiveRow);
  setValue('C' + passiveRow, new Date().toLocaleString());
}

为了使“”正常工作,第1行必须具有标题。它仅在只有1个结果(最后应该有1个结果)的情况下起作用。它会找到名称和空格以放置日期。

1 个答案:

答案 0 :(得分:0)

尝试一下:

c1,c2和c3是列号n1,n2和n3是值或字符串或null,名称是工作表名称。

join -i -t '|' -j 1 -o 2.2,2.3 1.txt 2.txt > out.txt