基于不同工作表

时间:2017-11-25 06:25:53

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

我在Google表格中有13张纸,12张在行标题中有名称,日期在列标题中。

我希望根据"HolidayList"表中列出的假期对整列进行灰色格式化。我写了一些代码,这些代码在正确的单元格地址下无效:

function formatForHoliday() {
  Logger.clear();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var holidays = ss.getRange("HolidayList!A2:A80").getValues();
  // Logger.log(holidays);

  // For each sheet
  for ( var s = 0; s <= 12; s++ ) {
    var sheet = ss.getSheets()[s];
    // Logger.log(sheet);
    var values = sheet.getRange(sheet.getName() + "!F3:NF3").getValues();
    // var newValues = [];
    // Logger.log(values);

    // In each sheet, for each value
    for (i in values[0]) {
      for (j in holidays) {
        var val = values[0][i];
        var hol = holidays[j][0];
        Logger.log(val.valueOf());
        Logger.log(hol.valueOf());

        if (val.valueOf() == hol.valueOf()) {
          // newValues.push(values[0][i]);
          var cellsRange = sheet.getRange(4, i + 6, 52, 1);
          var address = cellsRange.getA1Notation();
          cellsRange.setBackground('grey');
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您的代码似乎没问题,我现在唯一能看到的问题是您正在获取设置[多个]单元格的范围,但只将背景设置为一个。

您正在将setBackground()应用于字符串。 getA1Notation()返回字符串而不是范围。 https://developers.google.com/apps-script/reference/spreadsheet/range#geta1notation

setBackground()只能应用于范围。

https://developers.google.com/apps-script/reference/spreadsheet/range#setbackgroundcolor

var cellsRange = sheet.getRange(4, i + 6, 52, 1);
var address = cellsRange.getA1Notation();
cellsRange.setBackground('grey');

相反,您应该设置所有已获取其范围/地址的单元格。 https://developers.google.com/apps-script/reference/spreadsheet/range#setbackgroundscolor

我认为你应该做的是:

  1. 您正在执行第一步,即正确获取范围。
  2. var cellsRange = sheet.getRange(4, i + 6, 52, 1);

    1. 现在你应该创建一个与(4,i + 6,52,1)相同维度的数组,即我认为[48X1]

    2. 使用&#39; <&lt;

    3. 填充所有元素
    4. 使用 setBackgrounds()方法。 https://developers.google.com/apps-script/reference/spreadsheet/range#setbackgroundscolor

    5. 如果这可以解决您的问题,请告诉我。或者如果您有任何疑问/建议。

      由于