我对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个结果)的情况下起作用。它会找到名称和空格以放置日期。
答案 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