2016-09-30 63 views
0

我有两张工作表;第一个是6列登记,第二个是8列登出。在两张不同的工作表中找到具有相同列的选定行并从中删除它

我的专栏是这样的:

在登记表上

代码|模型|取得|键入|位置|检查时间

在退房片:

退房(Y/N)|代码|模型|取得|键入|位置|入住时间|退房时间

如您所见,办理登机手续的列和数据通过过滤功能来检查床单。所以,当我想要签出一个“模型”时,我只需在特定单元格中键入模型名称,并从签入表单中提取相关数据。我还为第一列退房单做了一个功能,一旦我在“check-out?(y/n)”列下键入“y”,在其中一个已过滤的行中,它将输入now()time in最后一列。

我的问题是,我还需要在“check-out”工作表的第一列中找到带有“y”的行,然后根据“check-in time”在检入表中找到该行是每行最独特的数据),并从清单列表中删除它。我不知道该怎么做?我一直在寻找谷歌脚本代码,但不幸运。任何建议表示赞赏。

+0

现在是Google Spreadsheets还是Excel,他发布的时候只提到Google Spreadsheet,但你有两个与Excel相关的标签。 –

+0

@RobinGertenbach,这是Google电子表格;如果有类似的过程,并且有人知道,我只是标记了与Excel相关的东西。 – Alex

回答

1

在这里,你可能会需要一个onEdit()功能,如果“Y”在第一列中输入将检查:

function onEdit(e) { 
    var ss = e.source; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
     ...some code here.... 
    } 
} 

然后你从其中“Y”是输入行的值:

var checkOutArray = checkOutSheet.getRange(e.range.getRow(), 2, 1, 6).getValues()[0]; 

getValues()总是返回一个二维数组,这就是为什么你需要指定你想要它的第一个元素,即使只有一个。

在你从登记表上把所有的值相同的方式:

var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); 

然后是检查的一部分。我想这可能是更安全的所有阵列的值进行比较,而不只是日期:

for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 

其中arraysEqual是:

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 

总之它看起来像这样:

function onEdit(e) { 
    var ss = e.source; 
    var checkOutSheet = ss.getSheets()[0]; 
    var checkInSheet = ss.getSheets()[1]; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
    var checkOutArray = checkOutSheet.getRange(e.range.getRow(), 2, 1, 6).getValues()[0]; //getting the values from the row where "y" was entered (e.range.getRow()) 
    var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); //getting all the values from check out sheet 
    for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 
    } 

} 

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 
相关问题