【问题标题】:Google Apps Script - Changing values in a range of google sheets cellsGoogle Apps 脚本 - 更改一系列 google 表格单元格中的值
【发布时间】:2022-01-07 17:27:02
【问题描述】:

在以下示例中,我使用 Apps 脚本根据电子表格输入安排 Google 日历活动。这段代码工作得很好,但是我需要调整它以在源表上做一个小的操作。 您可以在此处看到,我过滤范围以仅包含 D 列 (r[3]) 中具有“待定”值的行。但是,我需要在循环中包含一行代码,以便在过滤后的行同步到我的 Google 日历后,D 列中的相同单元格值会更改为相应单元格的“已计划”。我已尝试遵循此解决方案,但由于我是 JS 新手,因此无法实施。

Google Apps Script - .setValue in cell based on for loop matching


function calendarSync() {
var ss = SpreadsheetApp.getActiveSheet();
var calendarId = "My Calendar ID";
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = ss.getRange('A2:I500').getValues().filter(r => r[3] == "Pending Schedule");

for (x=0; x<eventArray.length; x++) {
  var event = eventArray[x];
  var eventName = event[0];
  var startTime = event[1];
  var endTime = event[2];
  
  var exisEvents = eventCal.getEvents(startTime, endTime, {search: eventName}) //prevents creating duplicate events;
  if (exisEvents.length == 0) {
  eventCal.createEvent(eventName, startTime, endTime);
  }
}
}

【问题讨论】:

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


    【解决方案1】:

    一个简单的解决方案是更改脚本的一些逻辑。不要使用filter,而是使用if 语句,然后覆盖整个范围。

    function calendarSync() {
      var ss = SpreadsheetApp.getActiveSheet();
      var calendarId = "My Calendar ID";
      var eventCal = CalendarApp.getCalendarById(calendarId);
      var eventArray = ss.getRange('A2:I500').getValues();
    
      for (x = 0; x < eventArray.length; x++) {
    
        var event = eventArray[x];
        var eventName = event[0];
        var startTime = event[1];
        var endTime = event[2];
        var status = event[3]; // Used to in the following comparison expression instead of filter
        if (status === "Pending Schedule") {
          var exisEvents = eventCal.getEvents(startTime, endTime, {
            search: eventName
          }) //prevents creating duplicate events;
          if (exisEvents.length == 0) {
            eventCal.createEvent(eventName, startTime, endTime);
            eventArray[x][3] = "Scheduled"; // Update the status
          }
        }
    
      }
      ss.getRange('A2:I500').setValues(eventArray); // Overwrite the source data with the modified array
    }
    

    附:如果您使用默认运行时而不是var,最好使用constlet,尤其是在编写复杂脚本时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多