Google Apps Script(Google表格)提取字符串前4位并保留前导0写入的问题
Google Apps Script(Google表格)提取字符串前4位并保留前导0写入的问题
我来帮你解决这个前导0丢失的问题,核心原因和修正方法如下:
问题根源
- Google Sheets的自动类型转换:当你写入纯数字格式的字符串时,Sheet会默认把它识别为数字类型,自动去掉前导0;
- 数组处理不严谨:
getValues()返回的是二维数组(即使是单列数据),你之前直接用M_DATI[i].substring其实是对数组对象调用方法,虽然偶然能得到结果,但写法容易出问题,正确的取值应该是M_DATI[i][0](取第i行第1列的单元格值)。
修正方案(两种可选)
方案一:先设置单元格为文本格式,再写入数据
这种方法更直观,先把目标区域改成纯文本格式,确保写入的字符串完整保留前导0:
var ss = SpreadsheetApp.getActiveSpreadsheet(); var DATI = ss.getSheetByName("DATI"); var DATI_A = ss.getSheetByName("DATI_A"); // 读取源数据(二维数组结构) var M_DATI = DATI.getRange(1, 1, 4, 1).getValues(); // 初始化用于写入的二维数组 var M_DATI_W = []; for (var i = 0; i < 4; i++) { // 提取每个单元格值的前4位字符串 var extractedText = M_DATI[i][0].substring(0, 4); // 将结果放入二维数组(setValues要求传入二维数组) M_DATI_W.push([extractedText]); } // 先把目标区域设置为纯文本格式,避免前导0丢失 DATI_A.getRange(1, 1, 4, 1).setNumberFormat('@'); // 写入处理后的数据 DATI_A.getRange(1, 1, 4, 1).setValues(M_DATI_W);
方案二:添加单引号前缀强制识别为文本
如果你不想修改单元格格式,可以在提取的字符串前加一个单引号(Google Sheets的特殊标记,用于强制识别为文本,单元格显示时不会显示单引号):
var ss = SpreadsheetApp.getActiveSpreadsheet(); var DATI = ss.getSheetByName("DATI"); var DATI_A = ss.getSheetByName("DATI_A"); var M_DATI = DATI.getRange(1, 1, 4, 1).getValues(); var M_DATI_W = []; for (var i = 0; i < 4; i++) { var extractedText = M_DATI[i][0].substring(0, 4); // 加单引号前缀,强制Sheet识别为文本 M_DATI_W.push(['\'' + extractedText]); } DATI_A.getRange(1, 1, 4, 1).setValues(M_DATI_W);
关键说明
- 一定要注意
getValues()的二维数组结构:即使是单列数据,返回的也是[[值1], [值2], ...],所以必须用[i][0]来取具体的单元格值; - 两种方案都能解决前导0丢失的问题,你可以根据自己的需求选择:如果后续还要往该区域写入文本,推荐方案一;如果只是临时写入,方案二更便捷。
备注:内容来源于stack exchange,提问作者Giuseppe Pane
相关产品推荐
相关产品推荐

