2017-04-02 83 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

这非常有帮助!让我朝着正确的地方靠近! –

相关问题