如何获取两个列等于特定值的行



我很新,我正在尝试创建一个时间/超时表格。我有2个单独的床单,首先是(活动(是触发启动oneDit(e(脚本的地方。启动Onedit(e(的所有功能都会影响第二张(被动(以填写列A(姓氏(,B(名称(,C(位置(,D(超时(。我通过获得A,B,C Active行的值(这不是代码(来完成超时功能。扳机始终与复制值相同,因此相对简单。在被动工作表上,我使用的所有值使用某人制作的代码,其中称为AddRecord,在该代码中获得了被动表的最后一行 1,并安装了从活动表中获取的值并将其插入。因此,它添加了记录而无需覆盖任何内容。效果很好。但是,很难制作"时间"功能。e(时间(我的想法是通过搜索被动!是空的。如果是这样,它会增加新的。如果不是空的,它将忽略这一行,并继续向下搜索被动的下一行!匹配被抓取的值。一旦找到了这一行,就会得到。(被动!E 抓取行,new Date(((

我确实在线找到了一个函数,可以找到与Active!但是它不断覆盖第一场比赛的日期。它从不忽略使用非空单元到下一个匹配行的行。也许我只是有点偏离,这就是为什么我要在答案中寻求大量细节和解释的原因。这是我从另一个答案中使用的代码。

function getCurrentRow() {
  var currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex();
  return currentRow;
}
function onSearch1()
{

我添加了

  var row = getCurrentRow();
  var activeLocation = getValue('ACTIVE!A' + row);

继续其他代码

 var searchString = activeLocation;
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PASSIVE"); 
    var column =1; //column Index   
    var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row
  var searchResult = columnValues.findIndex(searchString); //Row Index - 2

我添加了

 setValue(PASSIVE!E + searchResult, new Date().toLocaleString())

如果每个人都有不同的名称,它可以工作,但是搜索结果总是找到了比赛的第一行,我尝试添加一个if Active!a == passive!a &&被动!第一次真实。

继续其他代码

if(searchResult != -1)
    {
        //searchResult + 2 is row index.
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PASSIVE").setActiveRange(sheet.getRange(searchResult + 2, 1))
    }
   if(searchResult = searchResult2) {
    setValue('PASSIVE!E' + searchResult, new Date().toLocaleString())
  }
}
Array.prototype.findIndex = function(search){
  if(search == "") return false;
  for (var i=0; i<this.length; i++)
    if(this[i] == search) return i;
  return -1;
}

所以这是我使用的,但不确定这是否是正确的方法。每次我使用它时,它只会将搜索量设置为第一行,发现如果搜索串发现了最后一行,则考虑到添加记录会随着时间的推移而下降,并且签名应该是最新的姓名。但是我猜想是否只能获得搜索一个范围的函数,并在特定列中找到两个值的行,然后我可以只有 setValue('PASSIVE!E' + foundRow, new Date().toLocaleString())

编辑5/9/2019 17:34 PST谢谢那些回答的人。我正在扩大问题。

function rowWhereTwoColumnsEqual(value1,col1,value2,col2) {
 var value1=value1 || 'A1';//testing
 var value2=value2 || "";

我要的想法是搜索另一张纸的第1列,例如," Sheeta1"(第一张纸(。和另一张列的"(Cellisempty(的列。

var value1= 'Sheet1!A1';
 var value2= "";
 var col1='Sheet2!A';
 var col2='Sheet2!C';
 var ss=SpreadsheetApp.getActive();
 var sh=ss.getSheetByName('Sheet2');
 var rg=sh.getDataRange();
 var vA=rg.getValues();

但是,我不知道VA是如何工作的。我也想在另一个函数中使用该数字来获取所找到的行的曲((。

尝试以下:

function rowWhereTwoColumnsEqual(value1,col1,value2,col2) {
  var value1=value1 || 9;//testing
  var value2=value2 || 8;
  var col1=col1 || 1;//testing
  var col2=col2 || 2;//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);
    }
  }
  SpreadsheetApp.getUi().alert(rA.join(','));
  //return rA;//as an array
  //return rA.join(',');//as a string
}

相关内容

  • 没有找到相关文章

最新更新