将行从具有A列中的历史日期的多个选项卡移动到单个选项卡

时间:2019-05-16 17:20:14

标签: google-apps-script

我有一个包含多个标签的电子表格,所有标签的日期都在A列中。 我需要一个脚本,该脚本可以每晚使用触发器运行,以将A列中具有历史日期的所有行移动到历史行的单个选项卡上。

我已经成功地使第一张工作表中的历史记录行移至历史记录选项卡,但是我似乎无法使脚本适用于多个选项卡。

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 :(得分:0)

您定义char letter = 'Y'; int position = 0; string productNames[7] = { "Pen", "Paper", "Computer", "Pepsi", "Coke", "Book", "Scanner" }; int prizeOfproducts[7] = { 10, 2, 5000, 50, 45, 400, 2000 }; while (letter == 'Y') { string mystr = ""; cout << "enter the product name you want to search : "; cin >> mystr; int n = mystr.length(); char char_array[n + 1]; strcpy(char_array, mystr.c_str()); bool flag = false; for (int i = 0; i < 7; i++) { int m = productNames[i].length(); char char_arrayOrig[m + 1]; strcpy(char_arrayOrig, productNames[i].c_str()); if (strstr(char_arrayOrig, char_array) == NULL) { flag = false; } else { flag = true; position = i; break; } } if (!flag) { cout << "entered product not found in the product list . Do you want to search again Y/N ? : "; cin >> letter; } 的方式将始终为“区域1”。您可以对此进行测试。

SHEET_NAME

相反,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
  }
}