【问题标题】:Count Bold Cells with ability to copy/drag in Google Sheets Scripts计算粗体单元格,能够在 Google 表格脚本中复制/拖动
【发布时间】:2019-05-26 08:34:21
【问题描述】:

我有很多行,我想计算 Google 表格中有多少单元格是粗体的。我浏览了插件并搜索了预制代码 sn-ps(我没有编程技能)。

我找到了一个完全符合我要求的脚本,但它检查的单元格和输出答案的位置被硬编码在此处(来自用户随机部分的答案):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);

}

谁能提供一个脚本和公式,让我在工作表中定义一个范围,然后拖动它并更新它?

【问题讨论】:

  • 为了正确理解您的情况,您能否提供一个示例电子表格和您想要的结果?当然,请删除您的个人信息。

标签: google-apps-script google-sheets


【解决方案1】:

这里是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;
}

【讨论】:

  • 感谢您的建议。我不认为这让我得到我正在寻找的东西。它仍然只输出到 1 个单元格。我希望在每行的末尾更新数百个单元格。我发现这个例子可以让你像表格中的标准公式一样拖动一个简单的公式,但是这个是内容的总和,我只需要计算单元格:link
  • 非常感谢您更新此建议。
  • 该功能有效,但它并没有真正做到我需要它做的事情,不确定我是否做错了什么。我面临两个挑战:1)我希望从同一文档中的不同工作表中读取粗体单元格的总数。我尝试使用这个公式 =countBoldCells(row('Main Data'!C2),COLUMN('Main Data'!C2),row('Main Data'!Z2),COLUMN('Main Data'!Z2)) 但那没用。 2)一旦脚本运行它就不会更新计数,即使我刷新并让脚本再次运行。最后将公式所在的单元格更改为绿色(但我可以接受)
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2021-10-20
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多