Коды Google копируются из одной таблицы в другую на основе даты

78
11

В настоящее время я пытаюсь автоматически архивировать ответы из формы Google. У меня есть скрипт, который запускается каждый раз при отправке формы и выполняет некоторую обработку последней отправки.
То, что я хочу сделать, - это первая публикация месяца, создайте отдельную электронную таблицу с записями последних месяцев.
Я делаю это, получая дату с последнего месяца, создавая новую таблицу с именем и годом последнего месяца как имя файла.

Теперь мне нужно выбрать диапазон, основанный на датах. Поэтому в столбце A есть метка времени (например, 31/12/2012 22:21:31). Я хотел бы выбрать все строки между, например, 12/12/2014 00:00:00 и 31/12/2014 23:59: 59.

Используя этот пример, я знаю, что его можно скопировать диапазон, но он найдет правильный диапазон, в котором мне нужна помощь:

  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);

спросил(а) 2021-01-25T12:49:39+03:00 4 месяца, 2 недели назад
1
Решение
76

Хорошо, так что это, вероятно, не лучший ответ, но, похоже, это работает для меня:

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);

ответил(а) 2021-01-25T12:49:39+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема