1

每当 C 列值发生变化时,我想在行下方添加一条边框线。

好久没接触宏了,这是我自己整理的一个脚本,但没有按预期工作。有谁知道问题出在哪里?谢谢!

function underline() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  for (var i = 1; i < 10; i++) {
    if (sheet.getRange(spreadsheet.getCurrentCell().getRow() + i, 3) != sheet.getRange(spreadsheet.getCurrentCell().getRow() + i+1, 3)) {
        sheet.getRange(spreadsheet.getCurrentCell().getRow() + i, 1, 1, sheet.getMaxColumns()).activate();
        spreadsheet.getActiveRangeList().setBorder(null, null, true, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID);
         }
  }

};
4

1 回答 1

0

你的原始代码有点复杂,用一个if语句做了很多。我冒昧地将复杂的部分分成一个不同的函数,findOriginal(cell). 下面的代码增加了一行:

function findOriginal(cell) { //offsets given cell until finds new content
  while (cell.getValue() == cell.offset(1,0).getValue()) cell = cell.offset(1,0);
  return cell;
}

function underline() {
  var spreadsheet = SpreadsheetApp.getActive(),
      cell = spreadsheet.getSelection().getCurrentCell();

  cell = findOriginal(cell);

  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(cell.getRow(), 1, 1, sheet.getLastColumn()) // setting the range to border
  .setBorder(null, null, true, null, null, null, 
             '#000000', SpreadsheetApp.BorderStyle.SOLID); // you wrote this line
};
于 2018-05-08T05:02:29.830 回答