Я ценю коллективную мудрость группы.

Я нашел эти фрагменты кода в Интернете и попытался адаптировать их к моей ситуации и ни в коем случае не собирался никого заимствовать ...

Я хочу использовать каждое слово в ячейке с заглавной буквы. Я вызываю следующий сценарий из моей функции onEdit (e). Ничего не делает. Это просто не похоже на то, и, очевидно, я упускаю важные данные ...

function onEdit(e) { TitleCase(e); }

function TitleCase(e) {
  return e.toString().split(/\b/).map(function (word) {
    return e ? e.charAt(0).toUpperCase() + e.slice(1).toLowerCase() : '';
  }).join('');
}

Я новичок и очень ценю любое руководство.

Джим

2
James Woods 10 Фев 2021 в 03:53

1 ответ

Лучший ответ

Пункты модификации:

  • Если вы хотите запустить сценарий TitleCase из простого триггера OnEdit, необходимо напрямую поместить значения в ячейку.

  • В вашем сценарии e - это объект события. Таким образом, используя этот объект, значение извлекается и помещается в ячейку.

  • В вашем сценарии TitleCase я думаю, что это почти правильно. Но я думаю, что e из return e ? e.charAt(0).toUpperCase() + e.slice(1).toLowerCase() : ''; должно быть word.

  • По вашему дополнительному запросу How would it be further modified to only perform this for one specific column? в этом случае необходимо проверить редактируемый столбец.

Когда вышеуказанные пункты отражены в вашем сценарии, это становится следующим.

Измененный скрипт:

Когда вы используете этот скрипт, поместите текст в ячейку. Таким образом, сценарий запускается.

function onEdit(e) {TitleCase(e);}

function TitleCase(e) {
  const columnNumber = 1; // Please set the specific column number. For example, 1 is the column "A".
  const range = e.range;
  if (range.getColumn() != columnNumber) return;
  const value = range.getValue().toString().split(/\b/).map(function(word) {
    return word ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() : '';
  }).join('');
  range.setValue(value);
}

Ссылки:

1
Tanaike 10 Фев 2021 в 01:48