如何为边框中不为空的单元格设置边框

时间:2019-01-21 13:11:59

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

我有一个边框脚本,该脚本检查“ A”列是否不为空,然后在整个行周围绘制边框,在此脚本中,我在指定列中的非空单元格周围也有一个粗边框。我现在遇到的问题是,每次在菜单项中调用脚本时,它都不会消除所有边框。

function setborders() {
  var menu = [{
    name: "Borders for nonempty cells",
    functionName: "borders"
  }];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Set Borders", menu);
}

function borders() {
  var ss = SpreadsheetApp.getActive();
  var numsheets = ss.getNumSheets();
  var allsheets = ss.getSheets();
  for (var s in allsheets) {
    var sheet = allsheets[s]
    var r = ss.getActiveRange();
    var range = sheet.getRange("A2:V1000");
    var values = range.getValues();
    var offsetRow = range.getRowIndex();

    for (var i = 0; i < allsheets.length; i++)
      if (['Current Sales', 'Pending Orders', 'Subcontract Orders', 'Partial Shipped', 'Quotes', 'Archived Sales'].indexOf(allsheets[i].getName())) {

        if (sheet.getRange(range.getRow(), 1).getValue()) {
          range.setBorder(false, false, false, false, false, false);
          for (var i = 0; i < values.length; i++) {
            if (values[i][0]) { // Only for non-empty A column cells
              sheet.getRange("A" + (i + offsetRow) + ":V" + (i + offsetRow)).setBorder(true, true, true, true, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
            }
          }

          for (i = 0; i < values.length; i++) {
            if (values[i][0] && values[i][14]) {
              sheet.getRange("O" + (i + offsetRow) + ":O" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
            }
          }

          for (i = 0; i < values.length; i++) {
            if (values[i][0] && values[i][18]) {
              sheet.getRange("S" + (i + offsetRow) + ":S" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
            }
          }
          for (i = 0; i < values.length; i++) {
            if (values[i][0] && values[i][19]) {
              sheet.getRange("T" + (i + offsetRow) + ":T" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
            }
          }
          for (i = 0; i < values.length; i++) {
            if (values[i][0] && values[i][20]) {
              sheet.getRange("U" + (i + offsetRow) + ":U" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
            }
          }
          for (i = 0; i < values.length; i++) {
            if (values[i][0] && values[i][21]) {
              sheet.getRange("V" + (i + offsetRow) + ":V" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
            }
          }
        }
      }
  }
}

1 个答案:

答案 0 :(得分:0)

这是更正的代码(经过讨论):

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = ss.getActiveRange();
  var range = ss.getRange("A2:V1000");
  var values = range.getValues();
  var offsetRow = range.getRowIndex();

  if(s.getRange(e.range.getRow(), 1).getValue()) {
    range.setBorder(false, false, false, false, false, false);
    for (var i = 0; i < values.length; i++) {
      if (values[i][0]) { // Only for non-empty A column cells
        ss.getRange("A" + (i + offsetRow) + ":V" + (i + offsetRow)).setBorder(true, true, true, true, null, null, "black",SpreadsheetApp.BorderStyle.SOLID);
      }
    }
    for (i = 0; i < values.length; i++) {
      if (values[i][0] && values[i][19]) { // Only for non-empty T column cells (in addition to the above condition for A column cells)
        ss.getRange("T" + (i + offsetRow) + ":T" + (i + offsetRow)).setBorder(true, true, true, true, true, true, "black",SpreadsheetApp.BorderStyle.SOLID_THICK);
      }
    }
  }
}

细边框适用于非空A列单元格,附加的粗边框适用于非空A和T列单元格。