我想将输入单元格的每个单词的第一个字母大写。我对编程一无所知。
我发现下面的脚本很接近,但是这个脚本大写了每个字,这不是我想要的:
function onEdit(e) {
if (typeof e.value != 'object') {
e.range.setValue(e.value.toUpperCase());
}
}
答案 0 :(得分:0)
如果你需要帮助调整上一个答案中已经提供的信息,那么它就是:
function onEdit(e) {
if (typeof e.value != 'object') {
e.range.setValue(titleCase(e.value));
}
}
function titleCase(str) {
return str.toString().split(/\b/).map(function(word) {
return word ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() : '';
}).join('');
}
这将明确地将任何更新的单元格的文本转换为标题大小写,例如“一只大棕熊”变成了“大棕熊”。
如果您希望将首字母大写 并保持每个单词的其余部分不变,则可以删除上述函数中的 .toLowerCase()部分。然后,“一头大棕熊”的文字将成为“一头大棕熊”。
titleCase 函数取自this answer。
编辑:要跳过大写单词的部分内容,使用撇号,您可以将原始的 titleCase 函数替换为此函数,这将引入特定的解决方法。 -word撇号:
function titleCase(str) {
var isApostrophe = false;
return str.toString().split(/\b/).map(function(word) {
var result = word ? (!isApostrophe ? word.charAt(0).toUpperCase() : word.charAt(0).toLowerCase()) + word.slice(1).toLowerCase() : '';
isApostrophe = (word == "'");
return result;
}).join('');
}
所以,现在,“有一只'大'棕熊”的文字将变成“有一只'大'棕熊”。
编辑2 : 要仅将此规则应用于某些列,您可以使用此版本替换 onEdit 函数:
function onEdit(e) {
if (typeof e.value != 'object') {
if ([3, 5, 10, 11, 12, 13].indexOf(e.range.columnStart)<0) return;
e.range.setValue(titleCase(e.value));
}
}