能够在Google表格脚本中复制/拖拽的粗体单元格

时间:2019-05-26 08:34:22

标签: google-apps-script google-sheets

我有很多行要计算Google表格中有多少个单元格加粗。我浏览了插件,并搜索了预制的代码片段(我没有编程技能)。

我找到了一个脚本,该脚本完全可以实现我想要的功能,但是它检查的单元格以及将答案输出到哪里(此处是来自用户随机部分的答案)都经过硬编码:Count Bold Cells in Google Sheets Script

我有几百行,我想知道有多少个加粗的单元格,所以我必须制作数百个单独的脚本才能使用它。我试图将其转换为可以在工作表上拖动/复制的命令,但是这种技能远远超出了我的范围。

这是用粗体对所有单元格进行计数的代码,但是范围输入和输出是硬编码的

  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getActiveSheet();
  var range_input = sheet.getRange("E2:S7");
  var range_output = sheet.getRange("G14");

  // Get the fontWeights of the range and flatten the array
  var cell_styles = range_input.getFontWeights().join().split(",");

  // Filter out any value that is not "bold"
  var filter_bold = cell_styles.filter(function (e) { return e == "bold" });

  // Set the count
  range_output.setValue(filter_bold.length);

}

有人可以提供一个脚本和公式,让我在工作表中定义一个范围,然后将其拖动并更新吗?

1 个答案:

答案 0 :(得分:0)

这里是指向working example的链接,下面是后面的代码。 需要注意的重要一点是,您需要刷新浏览器窗口以重新计算公式。仅仅通过更改单元格样式就无法刷新公式结果。

function onOpen(){
  refresh()
}

function refresh(){
  var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet2")
  var formulaCol = sheet.getRange("E:E").getColumn()
  var formulaRange = sheet.getRange(2, formulaCol, sheet.getDataRange().getLastRow()-1, 1) 
  var rowCount = formulaRange.getLastRow()-formulaRange.getRow()+1
  var dummyFormulas = []
  var formulas = formulaRange.getFormulas()
  for(var i=0; i<rowCount; i++){
    dummyFormulas.push(['=""'])
  }
  Logger.log(dummyFormulas)
  Logger.log(formulas)
  formulaRange.setFormulas(dummyFormulas)
  SpreadsheetApp.flush()
  formulaRange.setFormulas(formulas)
}

function countBoldCells(startRow, startColumn, endRow, endColumn, random){
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getActiveSheet();
  var range_input = SpreadsheetApp.getActiveSheet().getRange(startRow, startColumn, endRow-startRow+1, endColumn-startColumn+1)

  // Get the fontWeights of the range and flatten the array
  var cell_styles = range_input.getFontWeights().join().split(",");

  // Filter out any value that is not "bold"
  var filter_bold = cell_styles.filter(function (e) { return e == "bold" });

  return filter_bold.length;
}