如何设置字符串的粗体部分?

问题描述

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

=boldKeywords("I am an example 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;
}

解决方法

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

IssueTracker中已经报告了此问题。您可以单击页面左上方的星形按钮,以增加Google实施此功能的机会。

可能的解决方法:

  • 您可以创建一个按钮/菜单来执行常规功能,该功能将能够设置所选单元格的格式和值。
  • 例如,当您编辑单元格或单击复选框时,可以使用onEdit()触发器来设置单元格的格式和值。
  • 您可以设置时间驱动触发器,以在单元格格式不正确时更改单元格的格式。
,

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

如Marios所述,您不能在自定义公式中使用RichText,因此必须对设置进行一些修改。

例如,您可以将关键字写到空闲单元格(例如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);
}

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

enter image description here

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