Google App Script技术实现:从命名范围取值并提取子字符串写入表格(替代MID函数)
嗨,欢迎来到Stack Overflow!很高兴能帮你搞定这个Google Apps Script的问题~
你现在的需求是不用公式,直接在脚本里完成提取扫描号部分内容并写入DATA工作表B列的操作,其实很简单,用JavaScript的字符串处理方法就能替代Excel的MID公式啦。
修改后的完整代码
function SaveScan() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var myForm = ss.getSheetByName("INPUT"); var myData = ss.getSheetByName("DATA"); // 获取扫描号的值并转为字符串,避免数字格式带来的截取问题 var myScan = myForm.getRange("ScanNr").getValue().toString(); // 提取第8位开始的4个字符,对应Excel里的MID(Ax,8,4) // 注意:JS字符串索引从0开始,所以第8位对应索引7,取到索引11(不包含) var extractedPart = myScan.substring(7, 11); // 定位DATA表的下一行 var nextRow = myData.getLastRow() + 1; // 一次性写入A列和B列,比单独写两行更高效 myData.getRange(nextRow, 1, 1, 2).setValues([[myScan, extractedPart]]); }
关键细节说明
- 字符串转换:把扫描号转为字符串是为了避免数字格式(比如超长数字触发科学计数法)导致的截取错误。
- 替代MID公式:Excel的
MID是1位起始索引,而JS的substring是0位起始,所以MID(Ax,8,4)对应substring(7,11)——从索引7开始,取到索引11(不包含该位置),刚好是4个字符。 - 批量写入:用
setValues一次性写入一行两列的数据,能减少对Google服务的调用次数,比分别调用setValue更高效,尤其适合频繁执行的场景。
这样修改后,运行SaveScan函数时,就会把扫描号写入DATA表A列的新行,同时把提取的4位内容写入同一行的B列,完全不需要依赖公式啦~
内容的提问来源于stack exchange,提问作者Caramel
相关产品推荐
相关产品推荐

