Google Apps Script(谷歌表格)字符串操作基础技术咨询
Google Apps Script 表格文本处理代码优化问题解答
有编程经验但久未实操,从零学习Google Apps Script,已实现表格单元格文本处理功能,希望优化代码。简化后的函数功能为:获取当前单元格文本,移除空格,统计开头数字长度并将这些数字写回单元格。原代码如下:
function myFunction() { var spreadsheet = SpreadsheetApp.getActive(); var currentCell = spreadsheet.getCurrentCell().activate(); var style = SpreadsheetApp.newTextStyle().setForegroundColor('#000000').build(); var textString = currentCell.getRichTextValue().getText(); var count = 0; var char = textString.substring(count,count+1); textString = textString.replace(" ",""); while(char<10) { count = count+1; char = textString.substring(count,count+1); } var numbers = textString.substring(0,count); currentCell.setRichTextValue(SpreadsheetApp.newRichTextValue().setText(numbers) .setTextStyle(1, count, style).build()); };
问题1:获取textString时,能否不使用getRichTextValue()?
当然可以。如果单元格没有需要保留的富文本格式,直接用currentCell.getValue()就能获取纯文本内容,为了确保拿到字符串类型(避免单元格是数字时的类型问题),可以加上toString():
var textString = currentCell.getValue().toString();
问题2:写入新文本(numbers)时,能否不使用setRichTextValue()且无需指定样式?
完全可以。不需要设置富文本样式的话,直接用currentCell.setValue(numbers)即可,它会把纯文本写入单元格,自动继承单元格默认样式,代码更简洁:
currentCell.setValue(numbers);
问题3:循环中使用char<10可运行但逻辑存疑:char是单字符字符串,为何能与数字10比较?且会允许空格通过,该如何修正?
- 能运行的原因:JavaScript会自动做隐式类型转换,把字符串转成数字再比较。比如
"5"转成5,"a"转成NaN,但这种转换逻辑不严谨,很容易出问题。 - 空格通过的问题:空格字符转成数字是NaN,
NaN < 10返回false,会导致循环提前终止;而且原代码的replace(" ","")只移除第一个空格,若有多个空格也会残留。 - 修正方法:明确判断字符是否为数字,比如用
!isNaN(parseInt(char))来校验,同时先移除所有空格再处理:
var count = 0; textString = textString.replace(/\s/g, ""); // 先移除所有空格 var char = textString.substring(count, count + 1); while (!isNaN(parseInt(char)) && count < textString.length) { count++; char = textString.substring(count, count + 1); }
问题4:如何让replace函数移除textString中所有空格?
原代码的replace(" ","")只会替换第一个空格。要移除所有空格,需要用带全局标志g的正则表达式:
// 移除所有空白字符(包括空格、制表符等) textString = textString.replace(/\s/g, ""); // 若只想移除普通空格,也可以写成: // textString = textString.replace(/ /g, "");
内容的提问来源于stack exchange,提问作者Anne
相关产品推荐
相关产品推荐

