在Google表格文档中将标题大小写中的单元格大写

时间:2017-11-05 11:00:08

标签: javascript google-apps-script google-sheets

我想将输入单元格的每个单词的第一个字母大写。我对编程一无所知。

我发现下面的脚本很接近,但是这个脚本大写了每个字,这不是我想要的:

function onEdit(e) {
if (typeof e.value != 'object') {
e.range.setValue(e.value.toUpperCase());
}
}

1 个答案:

答案 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));
  }
}