【问题标题】:move a row in google spreadsheet based on todays date根据今天的日期在谷歌电子表格中移动一行
【发布时间】:2017-04-02 20:20:06
【问题描述】:

我正在尝试根据今天的日期值将同一电子表格中的一行数据从一个工作表移动到另一个工作表。

在“A”列中,我有一个日期。如果在“A”列中输入的日期早于今天的日期,我想移动该行。 (这是飞机的航班时刻表,我想将已经发生的航班移动到名为“过去的航班”的工作表上。)活动工作表的名称是“航班时刻表”。

移动该行后,我希望它从“航班时刻表”表中删除。我知道在哪里添加脚本,但不知道如何实现。

这是我尝试过的。我认为在线“如果(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);
   } 
  } 
 } 
}

任何帮助都会很大!

谢谢!

【问题讨论】:

  • 我应该在 Google 表格中添加这个。
  • 如果您正在寻求有关编写脚本的具体帮助,如果您发布一些显示您迄今为止尝试过的代码,您通常会得到更好的响应。
  • 谢谢。我应该考虑添加我尝试过的内容。

标签: google-apps-script google-sheets


【解决方案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 声明。有很多比手动选择行然后运行函数更好的方法来获取行数据。如果你决定让这个程序自动运行,你可以节省很多代码行,因为它只有在手动调用时才会运行。

【讨论】:

  • 谢谢。仍然得到我的印章,这很有用!
【解决方案2】:

此示例正在运行:

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() 方法),但它正在工作并且允许拥有清晰的代码。

【讨论】:

  • 这很有帮助!让我更接近正确的地方!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多