【问题标题】:Count the number of cells that have the text strikethrough计算带有文本删除线的单元格的数量
【发布时间】:2020-03-29 18:55:48
【问题描述】:

我想创建一个自定义函数来计算删除线文本的数量。是否可以创建一个脚本来执行此操作?

目前,我设法创建了一个使用删除线文本计算单元格数量的脚本,但是我必须每次针对不同的范围修改我的脚本,并且我无法创建一个自定义函数来计算数量带有删除线的单元格。

这是我的脚本:

结果在L20和脚本中的控件

// Count the number of cells that are barred
function fontLine() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var plage = "E4:E11"
  var range = sheet.getRange(plage);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if (cell.getFontLine() === 'line-through')
        x++;
    }
  }
  sheet.getRange("L20").setValue(x);
  return x;
}

【问题讨论】:

  • “无法创建自定义函数”是什么意思?遗憾的是,在 google-sheets 中,您只会获得选定的单元格值。但是您可以将函数的参数更改为我假设的带有环绕引号的字符串 - 或者将范围作为文本放入另一个字段 - 并使用它来查找范围。或者可能使用命名范围。
  • 你好@Psychomecano,我发表了一个答案。让我知道这是否是你要找的。干杯!

标签: javascript google-apps-script google-sheets google-sheets-custom-function


【解决方案1】:

不可能在自定义函数中使用setValue,但正如您已经发现的那样,可以通过使用“常规脚本”(从菜单运行它,通过单击图片,来自脚本编辑器等)

参考

【讨论】:

    【解决方案2】:

    修改代码

    1. 现在使用getActiveSheet()获取调用函数所在的工作表,getDataRange()获取工作表中存在数据的整个范围。
    2. 它在整个范围内使用getFontLines(),而不是逐个单元格迭代并调用getFontLine() 到每个单元格。这会产生更高效的代码(请参阅:Best Practices - Minimize calls to other services)。
    3. 删除了setValue() 呼叫。如果您希望将此自定义函数的结果放在L20 单元格中,只需将其内容修改为以下公式:=fontLine()。自定义函数返回的值将被设置为单元格的值。
    // Count the number of cells in the sheet that are barred
    function fontLine() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var range = sheet.getDataRange();
      var fontLines = range.getFontLines();
      var x = 0;
      for (var i = 0; i < fontLines.length; i++) {
        for (var j = 0; j < fontLines[i].length; j++) {
          if (fontLines[i][j] === 'line-through')
            x++;
        }
      }
      return x;
    }
    

    示例执行

    免责声明

    • 自定义函数在将它们写入单元格时执行。之后,它们的结果被缓存,以便使用更少的资源。这意味着,如果您在工作表中添加或移除删除线,则必须在单元格中移除并重新插入自定义函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多