0

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

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

这是我的脚本:

结果在 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;
}
4

2 回答 2

0

修改您的代码

  1. 它现在用于getActiveSheet()从调用函数的地方获取工作表,并getDataRange()获取工作表中存在数据的整个范围。
  2. getFontLines()在整个范围内使用,而不是逐个单元格迭代并调用getFontLine()每个单元格。这会产生更高效的代码(请参阅:最佳实践 - 最小化对其他服务的调用)。
  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;
}

示例执行

执行示例

免责声明

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

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

参考

于 2019-12-04T22:55:19.183 回答