如何设置部分字符串加粗?
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
以正确地将关键字的所有实例突出显示为粗体是很重要的。
我想从单元格中取出一个字符串并检查它的关键字。然后应将这些关键字标记为粗体,并且应返回带有粗体标记关键字的完整字符串。这是一个例子:
=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
以正确地将关键字的所有实例突出显示为粗体是很重要的。