Перемещение строк из нескольких вкладок с исторической датой в столбце A на одну вкладку - PullRequest
0 голосов
/ 16 мая 2019

У меня есть электронная таблица с несколькими вкладками с датой в столбце А. Мне нужен скрипт, который я могу запускать, используя триггер каждую ночь, чтобы переместить все строки с исторической датой в столбце А на одну вкладку для исторических строк.

Мне удалось заставить исторические строки на моем первом листе перейти на историческую вкладку, однако я не могу заставить скрипт работать для нескольких вкладок.

function HistoricDates() {

SHEET_NAME = "Area1" || "Area2" || "Area3"||"Area4";

  // Initialising
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var Sheet = ss.getSheetByName(SHEET_NAME);
  var PastSheet = ss.getSheetByName("Historic Sheet");  
  var lastColumn = Sheet.getLastColumn();

  // Check all values from sheets
  for(var i = Sheet.getLastRow(); i > 0; i--){

   // Check if the value is a valid date

    var dateCell = Sheet.getRange(i, 1).getValue();  //Dates in column 1
    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 = Sheet.getRange(i, 1, 1, Sheet.getLastColumn()).getValues();
        PastSheet.getRange(PastSheet.getLastRow() + 1, 1, 1, Sheet.getLastColumn()).setValues(rangeToMove);
        Sheet.deleteRow(i);

      }
    }
  }}

  // Check is a valid date
function isValidDate(value) {
  var dateWrapper = new Date(value);
  return !isNaN(dateWrapper.getDate());
}

Ожидаемый результат - перемещение всех исторических строк в Зонах 2,3 и 4 для перехода на одну историческую вкладку.

Моя таблица со скриптом доступна по следующей ссылке:

https://docs.google.com/spreadsheets/d/1WiZWok4onddTErdAxlWmU82KRSGfVJr5wi1p-rlbY5E/edit?usp=sharing

1 Ответ

0 голосов
/ 17 мая 2019

Как вы определили SHEET_NAME, это всегда будет «Область 1».Вы можете проверить это.

function test() {
  SHEET_NAME = "Area1" || "Area2" || "Area3"||"Area4";
  Logger.log(SHEET_NAME);
}

Вместо этого SHEET_NAME должен быть массивом, а затем вам нужно перебрать этот массив.Ниже я привел пример того, как определить этот массив и получить листы.

function loopThroughSpecificSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNames = ["Area1", "Area2", "Area3", "Area4"];
  for (var j in sheetNames) {
    var sheet = ss.getSheetByName(sheetNames[j]);
    // Do other stuff
  }
}

Предполагая, что остальная часть вашего кода работает правильно (я не анализировал его), ваш измененный скрипт будет выглядетькак это:

function HistoricDates() {
  // Initialising
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var pastSheet = ss.getSheetByName("Historic Sheet");
  var sheetNames = ["Area1", "Area2", "Area3", "Area4"];
  for (var j in sheetNames) {
    var sheet = ss.getSheetByName(sheetNames[j]);
    var lastColumn = sheet.getLastColumn();

    // Check all values from sheets
    for(var i = sheet.getLastRow(); i > 0; i--) {
      // Check if the value is a valid date
      var dateCell = sheet.getRange(i, 1).getValue();  //Dates in column 1
      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 = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues();
          pastSheet.getRange(pastSheet.getLastRow() + 1, 1, 1, sheet.getLastColumn()).setValues(rangeToMove);
          sheet.deleteRow(i);
        }
      }
    }
  }
}

// Check is a valid date
function isValidDate(value) {
  var dateWrapper = new Date(value);
  return !isNaN(dateWrapper.getDate());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...