You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:48:10