0

这里问我一个问题,我有@utphx提供的这个脚本(非常感谢@utphx)......

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

这工作得很好,但我想稍微扩展它以排除一些 unicode 字符,例如......例如......Ⓚ☎,因为它们的字体大小比同一单元格中的字母和数字更大,并且在大写字母之后功能它们以相同的字体大小变化,例如字母和数字,与它们相比它们看起来非常小。我尝试了几种我在这里和网络其他地方找到的方法,但由于我缺乏 Java 编码知识,并且由于这些字符可以与数字和字母在同一个单元格中,要么所有字符都更改为大写字母或者没有。

有没有办法在上面的代码中指定这种类型的字符,以便排除它们变为大写?

编辑:我在@Ruben 的这个答案中找到了以下代码,并添加了@ocordova关于使用getFormula()方法的建议,大写函数可以正常工作,而不会触及包含任何公式和这些类型字符的单元格:☎✈< /p>

function onEdit(e) {
  var range = e.range;
  var value = range.getValue();
  var sheet = range.getSheet();
  if (range.getRow() > 1 && 
      range.getColumn() > 1 && 
      typeof value === 'string') {
    if(!range.getFormula()) {
      range.setValue(value.toUpperCase());
    } else {
    if (ind === 0 && e.range.rowStart > 1 && e.range.columnStart >= 1  && e.range.getFormula() == '') {
      e.range.setValue(e.value.toUpperCase());
      return;
      } 
    }
  }
}

我现在唯一需要添加的是检查单元格是否包含以下任何字符:Ⓚ Ⓘ Ⓣ Ⓕ (可能还有更多这种类型的字母或数字),以便将它们从大写函数中排除。有谁知道我该怎么做?我想 REGEX 将是一个解决方案,但我不知道如何以及将它放在上面的代码中。

EDIT2:划掉上面的EDIT。该代码的行为非常奇怪。如果您选择一些单元格来更改边框样式,它会将值从一个单元格复制到所有其他选定的单元格!!!。我将发布一个关于此的新问题。

先感谢您

内苏斯

4

1 回答 1

1

试试这个(我将字体大小设置为 15,但您可以随意更改)

function font_size(cell){
  var font_size = 15
  var range = SpreadsheetApp.getActiveSheet().getRange(cell);
  var value = range.getValue().toString();
  var letterNumber = /^[\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 (Object.prototype.toString.call(e.range.getValue()) !== "[object Date]" ) {
 e.range.setValue(e.value.toUpperCase());
 var cell = e.source.getActiveRange().getA1Notation();
 font_size(cell)
}
}

基本上,它的作用是找到非 ascii 字符并更改它们的字体大小。

参考: https ://developers.google.com/apps-script/reference/spreadsheet/rich-text-value-builder

于 2019-10-12T11:44:34.400 回答