如何设置部分字符串加粗?

How to set part of string bold?

我想从单元格中取出一个字符串并检查它的关键字。然后应将这些关键字标记为粗体,并且应返回带有粗体标记关键字的完整字符串。这是一个例子:

=boldKeywords("I am an example text", "text")

结果:我是例子text.

该脚本目前有效。我无法将关键字设为粗体。这应该发生在这里:“//splitString[i] 应该设置为粗体”。这是脚本:

function boldKeywords(text, keywords) {
    
// Split the test and the keywords into an Array with single Strings
  var splitString = text.split(" ");
  var splitKeywords = keywords.toUpperCase().split(", ");
    
//Go through the array and compare each word to the keywords
  for(var i = 0; i < splitString.length; i++){
    for(var j = 0; j < keywords.length; j++){
      if(splitString[i].toUpperCase().localeCompare(splitKeywords[j]) == 0){
        //splitString[i] should be set bold
      }
    } 
  }
     
//Concatenate Array Sting to one String
  var retunString = "";
          
  for(var j = 0; j < splitString.length; j++) {
    retunString = retunString + " " + splitString[j];
  }

//return String
  return retunString;
}

很遗憾,自定义函数无法return格式化数据。

此问题已在 IssueTracker 中报告。您可以点击页面左上角的星号按钮来增加Google.

实施此功能的机会

可能的解决方法:

  • 您可以创建一个 button/menu 来执行能够设置所选单元格的格式和值的常规函数​​。
  • 您可以使用 onEdit() 触发器来设置单元格的格式和值,例如,当您编辑单元格或单击复选框时。
  • 您可以设置一个 time-driven 触发器来在单元格格式不正确时更改单元格的格式。

要使部分单元格内容变为粗体,您需要使用 RichText

如 Marios 所述,您不能在自定义公式中使用 RichText,因此您必须稍微修改一下 set-up。

例如,您可以将关键字写入一个空闲单元格(例如 A1)并创建一个 custom button,您可以为其指定以下脚本:

function boldKeywords() {
  var cell = SpreadsheetApp.getActive().getActiveSheet().getActiveCell();
  var text = cell.getValue();
  var keywords = SpreadsheetApp.getActive().getActiveSheet().getRange("A1").getValue();  
  // Split the test and the keywords into an Array with single Strings
  var splitString = text.split(" ");
  var splitKeywords = keywords.toUpperCase().split(", ");
  var value = SpreadsheetApp.newRichTextValue();
  value.setText(text);
  var position = 0;
  for(var i = 0; i < splitString.length; i++){
    for(var j = 0; j < splitKeywords.length; j++){
      if(splitString[i].toUpperCase().localeCompare(splitKeywords[j]) == 0){
        var start = text.indexOf(splitString[i], position)-1;
        var end = start + splitString[i].length+1;
        var bold = SpreadsheetApp.newTextStyle().setBold(true).build();
        value.setTextStyle(start, end, bold);       
      }
    } 
    position += splitString[i].length+1;
  }  
  var values = value.build();
  cell.setRichTextValue(values);
}

此脚本会将您按下按钮时选中的单元格的所有关键字标记为粗体。

请注意,如果您希望在一个单元格中遇到不止一次,那么定义 position 以正确地将关键字的所有实例突出显示为粗体是很重要的。