我很新,我正在尝试创建一个时间/超时表格。我有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
}