从数组中获取日期值并将其设置为Spreadsheet中的单元格

时间:2017-07-17 08:55:48

标签: javascript google-apps-script google-sheets

我正在研究如何使用google脚本对数组执行某些操作。

对于我们学校,我们正在创建一个工具,可以自动创建一个电子表格,其中包含特定年份的日历,包括庆祝活动和其他特殊日子,其中一些会重复多年(新年,圣诞节,当地庆祝活动等),和其他变量每年。在这个电子表格中,我们列出了学年中的每一天,每行一个日期,以便在下一个单元格中设置相关信息,例如,由于某种原因某天不来的教师。这种格式非常有用,因为我们可以快速获取此信息并更改当天的日程安排。

我们认为我们可以使用这个不可更改的日期(庆祝活动)创建一个数组,然后与实际日历进行比较,并将特定假日放在一个单元格中。

数组中的年份没有出现,因为我们希望每年都有用,如果我们现在设置,我们认为以后还有更多的任务要做。在脚本的前一阶段,我们复制没有日期的日历模板,从用户提示设置实际年份(例如,“2017”,这是用户之前输入的内容)。也许这个提示信息可以在数组的第一个值(日期)内设置,并且每年使用具有完整日期的当前数组工作?我不知道......

问题出现在操纵日期和转换为电子表格可读内容上。我们的代码,可能与incorrections(我不是一个优秀的程序员,我正在学习如何在不同的javascript元素中进行交互,以及哪个是每个动作,方法或类的正确sintax)如下。

function writeStableHolidays(){
  var sheet = SpreadsheetApp.getActive().getSheetByName("calendar");
  var stableHolidays = [
    [09/11, "Some Holiday, in format dd/mm"],
    [10/12, "Other Holiday, we don't want to set here the Year"],
    [11/01, "Another one"]
  ];
  var whereToLook = [sheet.getRange(1,1,334,1)] // From here we look the actual year (format DD/MM/YYYY). This sheet has been created automatically from users prompt
  var whereToWrite = [sheet.getRange(1,2,334,2)] // Next cell is where we want to write info from array

  for ( i = 0 ; i < stableHolidays.length ; i++ ) { // Check every item in the array
    for (j = 0 ; j < whereToLook.length ; j++ ) { // Check every first row in the "calendar" sheet
      if (stableHolidays[i][0] == whereToLook[i]) {
        whereToWrite.push(festiusFixes[i][1]); // If there's a coincidence write the holiday info in the cell
      }
    }
  }
}

我在这里发现了几乎两个问题:a(现在!)未知语法不连贯(我之前说过它还不是我的特殊性:D)以及我们在gscript中操作日期时遇到的一些反复出现的问题的JavaScript。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设您的工作表日历如下所示:

enter image description here

您可以使用下一个功能:

function writeStableHolidays(){
  var sheet = SpreadsheetApp.getActive().getSheetByName("calendar");
  var stableHolidays = {
    "09/11": "Some Holiday, in format dd/mm",
    "10/12": "Other Holiday, we don't want to set here the Year",
    "11/01": "Another one"
  };

  // get data range
  var dataRange = sheet.getRange('A2:B'+sheet.getLastRow());
  // get data values
  var data = dataRange.getDisplayValues();

  // loop data rows
  for (var i = 0; i < data.length; i++)
  {
    // get DD/MM part from DD/MM/YYYY value
    var dateVal = data[i][0].replace(/\/\d+$/, '');
    // if found holiday on current date
    if (stableHolidays[dateVal])
    {
      // update Holiday column array value
      data[i][1] = stableHolidays[dateVal];
    }
  }

  // write updated values to sheet
  dataRange.setValues(data);
}

这将更新Holiday列的值:

enter image description here