如果行中的第一个单元格不为空,则将边框设置为一个范围

时间:2019-06-05 16:55:15

标签: google-apps-script google-sheets

如果该行的第一个单元格不为空,则需要将边界设置为该行的范围。

我有此代码:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var sheetmon = ss.getSheetByName('Monitor'); 
  var rows = sheetmon.getRange('G59:P90'); 
  var numRows = rows.getNumRows(); 
  var values = rows.getValues(); 
  var testvalues = sheetmon.getRange('G59:G90').getValues(); 

  rows.setBorder(false, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 

  for (var i = 0; i <= numRows - 1; i++) {
      var n = i + 1;
      if (testvalues[i] > 0) { 
        sheetmon.getRange('a' + n + ':g' + n).setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 
      }
  }
}

但是它仅适用于G59:G90范围的第一行

我哪里错了?

2 个答案:

答案 0 :(得分:1)

testvalues是一个二维数组。所以

if (testvalues[i] > 0) { 
        sheetmon.getRange('a' + n + ':g' + n).setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 
      }

应该是这样的:

if (testvalues[i][0] > 0) { 
        sheetmon.getRange('a' + n + ':g' + n).setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 
      }

答案 1 :(得分:0)

如果要在循环中要评估的同一行中设置边框,则必须将n的值更改为始终比i大59。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetmon = ss.getSheetByName('Monitor'); 
  var rows = sheetmon.getRange('G59:P90'); 
  var numRows = rows.getNumRows(); 
  var values = rows.getValues(); 
  var testvalues = sheetmon.getRange('G59:G90').getValues(); 

  rows.setBorder(false, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 

  for (var i = 0; i <= numRows - 1; i++) {
      var n = i + 59;
      Logger.log(testvalues[i] > 0);
      if (testvalues[i] > 0) {
        Logger.log(testvalues[i]);
        sheetmon.getRange('A' + n + ':G' + n).setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); 
      }
  }