使用Google Script将边框放在多张纸上

时间:2015-10-06 23:42:17

标签: google-apps-script google-apps

我有一张包含大约20张工作表的Google电子表格,可以使用一些importrange函数创建报告。我试图通过查看编辑中的所有工作表并在任何包含内容的单元格周围放置边框但是它似乎不起作用来使这个脚本工作。

function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();

var numSheets = ss.getNumSheets(); // count of sheets

// for every sheet
for( var s = 0; s < numSheets ; s++ ) { 
var sheet = sheets[s]; // passes an individual sheet object to var sheet
//Add borders to non-empty 
var range = SpreadsheetApp.getActiveSheet().getDataRange();
//set border
 range.setBorder(false, false, false, false, false, false);
  var values = range.getValues();
    for (var i = 0; i < values.length; i++) {
     for (var j = 0; j < values[i].length; j++) {
       if (values[i][j] !== "") {
         range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true,    true);
       }
     }
    } 
  }
}

1 个答案:

答案 0 :(得分:1)

我建议尝试使用此功能:

function onEdit(e){
  var ss  = SpreadsheetApp.getActiveSheet();

  var range = ss.getDataRange();

  var maxCol = range.getLastColumn();
  var maxRow = range.getLastRow();

  for (var i=0; i<maxRow; i++)
  {
    for (var j=0; j<maxCol; j++)
    {
      if(!ss.getRange(i+1, j+1).isBlank()) //Check whether the cell is blank
      {
        ss.getRange(i+1, j+1).setBorder(true, true, true, true, true, true);
      }
    }
  }
}

原因是,每当您对任何工作表进行编辑并遍历所有工作表时,您编写的函数都会运行。也就是说,如果您在Sheet1上编辑单元格A14,它将遍历所有20张纸张,检查所有纸张的整个范围的边框。然而,它们之前的运行可能已经存在边界,而其他19张表中没有任何变化。这样,只要在工作表上进行编辑,它就会遍历当前工作表的边框。但是,我想给你注意2点你当前的功能:

  • onEdit仅接受用户输入为“编辑”。
  • 你的表可能最终看起来像这样 enter image description here

根据您所代表的数据类型,这可能是您想要的,也可能不是您想要的。但是,如果我将功能简化了一点并使用了以下功能:

function onEdit(e){
  var ss  = SpreadsheetApp.getActiveSheet();

  var range = ss.getDataRange();
  range.setBorder(true, true, true, true, true, true);
}

我得到以下表格,代码更简单,更快捷: enter image description here

第一个场景通过为每个拥有数据的单元格添加边框,完全符合您的描述要求。但是,第二个只会在最大行和列的数据表范围内添加边框。希望这有帮助!