Автоматически сделать весь вставленный текст заглавными буквами в электронной таблице Google на основании некоторых условий - PullRequest
1 голос
/ 18 октября 2019

Я уже третий раз спрашиваю об этом ( 1-й , 2-й ), поскольку предыдущие ответы, как оказалось, имели некоторые проблемы. Итак, это мой (последний?) Третий вопрос:

У меня есть планировщик типа календаря электронных таблиц Google, который 8-10 пользователей вставляют данные каждый день. Эти данные могут быть числами, буквами и некоторыми символами Юникода, иногда смешанными в одной ячейке. Я хочу, чтобы все эти текстовые данные автоматически вводились в верхний регистр при вводе пользователем.

Итак, задача состоит в том, чтобы изменить все текстовые данные в верхний регистр, кроме ...

Теперь, после моих предыдущих попыток, у меня есть следующий скрипт, который выполняет работу и соблюдает указанные выше условия, кроме одного. Он не исключает символы Юникод / ​​заключенные буквенно-цифровые символы, и после изменения заглавных букв они становятся очень маленькими по размеру ...

function onEdit(e) {
  if (Object.prototype.toString.call(e.range.getValue()) !== "[object Date]" ) {    
    if (!e.range.getFormula()) {
      e.range.setValue(e.value.toUpperCase());
    }
  }
}

Итак ... как я могу, в приведенном выше коде, исключить также Юникод / ​​заключенные буквенно-цифровые символы символов?

РЕДАКТИРОВАТЬ: Это визуальный результат того, как скрипт работает сейчас. Я указал правильные результаты с «Да», а неправильные с «Нет» ... Результаты скриптов

1 Ответ

1 голос
/ 24 октября 2019

Итак, следуя предыдущему ответу, я немного поиграл с REGEX в этом, и, наконец, мне удалось изменить размер шрифта только на Вложенные буквенно-цифровые символы ...

function font_size(cell){
  var font_size = 18
  var range = SpreadsheetApp.getActiveSheet().getRange(cell);
  var value = range.getValue().toString();
  var letterNumber = /[\w*\x00-\x7F\☎✈⛴]/;
  var rich = SpreadsheetApp.newRichTextValue();
  rich.setText(value); 
  for (var i=0;i<value.length;i++){ 
    if (letterNumber.test(value.charAt(i)) == false){
       var style = SpreadsheetApp.newTextStyle(); 
    style.setFontSize(font_size); 
    var buildStyle = style.build(); 
    rich.setTextStyle(i,i+1,buildStyle); 
    }   
  }
  var format = rich.build()
  range.setRichTextValue(format); 
}


function onEdit(e) {
if (!e.range.getFormula())
if (Object.prototype.toString.call(e.range.getValue()) !== "[object Date]" ) {
 e.range.setValue(e.value.toUpperCase());
 var cell = e.source.getActiveRange().getA1Notation();
 font_size(cell)
}
}

Это работает для всех сценариев для меня. Прописная процедура работает за исключением:

  • Если значения ячеек являются датами
  • Если в ячейках содержатся формулы
  • Если в ячейках содержатся некоторые конкретные текстовые символы, смешанные с текстом.

Для символов «Вложенные буквенно-цифровые символы» код function font_size(cell) меняет размер шрифта на немного больший ... var font_size = 18.

В идеале наилучшим способом будет исключениеВложенные буквенно-цифровые символы точно так же, как это делается с датами и формулами, но я понятия не имею, возможно ли это и как это делается. Если кто-то знает, пожалуйста, поделитесь, но пока это лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...