2016-09-30 18 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; 
} 
相關問題