2017-04-02 80 views
2

我試圖基於當前日期的值在同一電子表格中將一行數據從一張轉移到另一張。基於今天的日期在google電子表格中移動一行

在欄目「A」中,我有一個日期。如果在列「A」中輸入的日期比今天的日期早,我想移動該行。 (這是飛機的航班時刻表,我想將已經發生的航班移到名爲「過去的航班」的航班上。)活動航班的名稱是「航班時刻表」。

行被移動後,我希望它從「Flight Schedule」表中刪除。我知道在哪裏添加腳本,但不知道如何做到這一點。

這是我試過的。我想在網上「如果(data.link> 1 ...」 data.link是不使用正確的。但我不能找到的東西,用於指示比今天的日期的。

function approveRequests() { 
var ss = SpreadsheetApp.getActiveSpreadsheet() 
sheet = ss.getActiveSheet(), 
sheetName = sheet.getName(), 
data = sheet.getDataRange().getValues(); 
if (sheetName == "Flight Shedule") { 
    var range = sheet.getActiveRange(), 
    startRow = range.getRowIndex(), 
    numRows = range.getNumRows(), 
    numCols = range.getNumColumns() 
    if (numCols == 9) { 
    if (data.length > 1) { 
    var values = range.getValues(), 
    nextSheet = ss.getSheetByName("Past Flight"), 
    lastRow = nextSheet.getLastRow(); 
nextSheet.getRange(lastRow+1,1,numRows,3).setValues(values); 
sheet.deleteRows(startRow,numRows); 
    } 
    } 
} 
} 

任何幫助將是巨大的!

謝謝!

+0

我應該添加這是在Google表格中。 –

+1

如果您要求編寫腳本的具體幫助,您通常會得到更好的回覆,如果您發佈一些代碼以顯示您迄今嘗試的內容。 – trevorc

+0

謝謝。我應該考慮添加我嘗試過的東西。 –

回答

1

好吧,我會根據你當前的代碼先用一些提示猶豫。

在你的函數,你做了sheet = ss.getActiveSheet()這是多餘的,因爲你已經有了SpreadsheetApp.getActiveSpreadsheet()。另外我會建議避免這個

var ss = SpreadsheetApp.getActiveSpreadsheet() 
sheet = ss.getActiveSheet(), 
sheetName = sheet.getName(), 
data = sheet.getDataRange().getValues(); 

贊成這樣的:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getActiveSheet(); 
var sheetName = sheet.getName(); 
var data = sheet.getDataRange().getValues(); 

這是更容易閱讀和更改,恕不犯錯誤。

data.length與當前日期無關,它只是數組的長度。所以,如果你選擇1行數據,它將是1,如果你選擇2行,它將是2等。.getValues()將返回一個數組,其中data[row][col]。你正在尋找的是獲取飛行時間的價值,將其轉換爲日期對象(不是谷歌特定的東西,只是一般的javascript)。然後使用var now = new Date()並比較兩者。

我還建議您重新考慮您的if聲明。有很多更好的方法來獲取行數據,而不是手動選擇行,然後運行該函數。如果您決定實際自動運行該代碼,則可以節省大量代碼行,因爲實際上只有在手動調用時纔會運行。

+0

謝謝。仍然得到我的印章,這很有用! –

0

此示例工作:

function approveRequests() { 

    // Initialising 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var scheduleSheet = ss.getSheetByName("Flight Shedule"); 
    var pastSheet = ss.getSheetByName("Past Flight"); 
    var lastColumn = scheduleSheet.getLastColumn(); 

    // Check all values from your "Flight Schedule" sheet 
    for(var i = scheduleSheet.getLastRow(); i > 0; i--){ 

    // Check if the value is a valid date 
    var dateCell = scheduleSheet.getRange(i, 1).getValue(); 
    if(isValidDate(dateCell)){ 
     var today = new Date(); 
     var test = new Date(dateCell); 

     // If the value is a valid date and is a past date, we remove it from the sheet to paste on the other sheet 
     if(test < today){ 

     var rangeToMove = scheduleSheet.getRange(i, 1, 1, scheduleSheet.getLastColumn()).getValues(); 
     pastSheet.getRange(pastSheet.getLastRow() + 1, 1, 1, scheduleSheet.getLastColumn()).setValues(rangeToMove); 
     scheduleSheet.deleteRow(i); 

     } 
    } 
    } 
} 

// Check is a valid date 
function isValidDate(value) { 
    var dateWrapper = new Date(value); 
    return !isNaN(dateWrapper.getDate()); 
} 

所以,是的,這不是最佳解決方案(使用多個sheet.getRange()方法的原因),但它的工作,並允許有一個清晰的代碼。

+0

這非常有幫助!讓我朝着正確的地方靠近! –

相關問題