【问题标题】:Google scripts copy range from one spreadsheet to another based on date谷歌脚本根据日期从一个电子表格复制到另一个电子表格
【发布时间】:2015-01-19 13:48:03
【问题描述】:

我目前正在尝试自动归档来自 Google 表单的回复。我有一个脚本,每次提交表单时都会运行,并对最后一次提交进行一些处理。
我想做的是在本月的第一次提交时,创建一个单独的电子表格,其中仅包含最近几个月的条目。
我通过获取上个月的日期来做到这一点,创建一个以上个月名称和年份作为文件名称的新电子表格。

我现在需要做的是根据日期选择一个范围。所以在 A 列中是一个时间戳 (例如 31/12/2014 22:21:31) - 我想选择例如 1/12/2014 00:00 之间的所有行: 0031/12/2014 23:59:59

使用这个example 我知道它可以复制一个范围,但它正在找到我需要帮助的正确范围:

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("0Aqv8.....");
  var source_sheet = ss.getSheetByName("Form Responses");
  var target_sheet = target.getSheetByName("Sheet1");
  var source_range = source_sheet.getRange("A2:A");
  var target_range = target_sheet.getRange("A2:A");

  var values = source_range.getValues();
  target_range.setValues(values);

我正在使用以下内容来获取月份的开始时间和结束时间:

  var x = new Date();
  var d = new Date();

  // Start Time:
  x.setDate(1);
  x.setHours(0);
  x.setMinutes(0);
  x.setSeconds(0);
  x.setMonth(x.getMonth()-1);

  // Finish Time:
  d.setDate(0);
  d.setHours(23);
  d.setMinutes(59);
  d.setSeconds(59);

【问题讨论】:

    标签: javascript google-apps-script google-spreadsheet-api


    【解决方案1】:

    好的,所以这可能不是最好的答案,但是它似乎对我有用:

    var x = new Date();
    var d = new Date();
    // Start Time:
    x.setDate(1);
    x.setHours(0);
    x.setMinutes(0);
    x.setSeconds(0);
    x.setMonth(x.getMonth()-1);
    // Finish Time:
    d.setDate(0);
    d.setHours(23);
    d.setMinutes(59);
    d.setSeconds(59);
    // Create a blank spreadsheet:
    var root = DocsList.getRootFolder()
    var newFileId = SpreadsheetApp.create(archiveName).getId();
    var newFile = DocsList.getFileById(newFileId);
    newFile.addToFolder(destFolder);
    newFile.removeFromFolder(root);
    
    // Get the spreadsheets:
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var target = SpreadsheetApp.openById(newFileId);
    var sheet = ss.getSheetByName("Form Responses");
    var target_sheet = target.getSheetByName("Sheet1");
    
    // Record the range:
    var firstRow = 1;
    var lastRow = 1;
    var width = sheet.getDataRange().getWidth();
    
    // Get all the current data:
    var numRows = sheet.getDataRange().getNumRows();
    var data = sheet.getDataRange().getValues();
    
    // Get the first entry:
    for(var i=0; i<numRows; i++){
      var tmp = new Date(data[i][0]);
      if (tmp > x) {
        firstRow = i+1;
        Logger.log(i + " - is the first row");
        i = numRows;
      }
    }
    
    // Get the last entry:
    for(var i=0; i<numRows; i++){
      var tmp = new Date(data[i][0]);
      if (tmp > d) {
        lastRow = i;
        Logger.log(i + " - is the last row");
        i = numRows;
      }
    }
    
    // Copy the title:
    var source_range = sheet.getRange(1,1,1,width);
    var target_range = target_sheet.getRange(1,1,1,width);
    var values = source_range.getValues();
    var formats = source_range.getNumberFormats();
    target_range.setValues(values);
    target_range.setNumberFormats(formats);
    target_sheet.setFrozenRows(1);
    
    // Copy the last months values:
    var source_range = sheet.getRange(firstRow,1,lastRow-firstRow+1,width);
    var target_range = target_sheet.getRange(2,1,lastRow-firstRow+1,width);
    var values = source_range.getValues();
    target_range.setValues(values);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-29
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多