javascript - Googleスクリプトは日付に基づいてスプレッドシート間で範囲をコピーします

原文 javascript google-apps-script google-spreadsheet-api

現在、Googleフォームからの回答を自動的にアーカイブしようとしています。フォームが送信されるたびに実行され、最後の送信の処理を行うスクリプトがあります。
私がしたいことは、月の最初の提出時に、最後の月のエントリだけを含む別のスプレッドシートを作成することです。
これを行うには、先月の日付を取得し、先月の名前と年をファイルの名前として新しいスプレッドシートを作成します。

次に、日付に基づいて範囲を選択する必要があります。したがって、列Aはタイムスタンプです(例:31/12/2014 22:21:31)-たとえば、1/12/2014 00:00:00と31/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);
答え
わかりましたので、これはおそらく最良の答えではありませんが、私にとってはうまくいくようです:

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);
関連記事

javascript - JavaScript:別のスクリプトに追加されたdivへのアクセスなし

javascript - nodejsのセッションは部分的に保存されています

javascript - マーカー位置json LeafletとWebGLEarthを更新

javascript - JSON:スラッシュがエスケープされるのはなぜですか?

javascript - RotativaでPDFが正しくレンダリングされない

javascript - jqueryでajax呼び出しを使用したフィルタリングとページネーション

javascript - gulp-file-includeとjadeの入れ子の問題

javascript - 動的について:JavaScriptコードモジュール(XPCOMUtils.jsm)を使用するURL?

javascript - three.js-複数のオブジェクト(obj&mtl)をループで追加

javascript - php変数を正しい形式でhtmlに渡す