这是我第三次问这个问题(第一个,第二位),因为以前的答案都有问题。所以这是我的(期末考试)第三个问题:
我有谷歌电子表格日历类型规划师,每天有8-10个用户正在插入数据。这些数据可以是数字、字母和一些unicode字符,有时它们都混合在一个单元格中。我希望所有这些文本数据在用户输入时自动更改为大写。
因此,任务是,将所有文本数据更改为大写,除.
现在,在我之前的尝试之后,我有了下面的脚本来完成工作,并保持上面的条件,除了一个。它不排除Unicode/括起来的字母数字字符,在大写更改后,它们变得非常小.
function onEdit(e) {
if (Object.prototype.toString.call(e.range.getValue()) !== "[object Date]" ) {
if (!e.range.getFormula()) {
e.range.setValue(e.value.toUpperCase());
}
}
}所以..。在上述代码中,我如何也排除Unicode/封闭字母数字字符?
编辑:这是一个可视化的结果,它是如何运行的脚本现在。我用“是”指出正确的结果,用“否”指出错误的结果.脚本结果
发布于 2019-10-24 09:18:40
因此,按照以前的答案,我在这个游戏中使用了一些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。
理想情况下,最好的方法是排除括起来的字母数字字符,就像用日期和公式一样,但我不知道这是否可能,以及它是如何做到的。如果有人知道,请分享,但就目前而言,这是最好的解决方案。
https://stackoverflow.com/questions/58453382
复制相似问题