使用getValue()从Google Sheet取字符串转JS数组异常求助
Google Sheet单元格字符串转二维数组异常解决
问题场景
在Google Sheet单个单元格中存储字符串1,Apple,2\n3,Orange,4,通过getValue()获取后,使用自定义csv_to_array函数转换,输出结果异常为[[ 1,'Apple','2\\n3','Orange',4 ]],但直接传入JS原生字符串时函数能正常生成目标二维数组[[1, "Apple", 2],[3, "Orange", 4]]。自定义函数代码如下:
const csv_to_array = (data, delimiter = ',', omitFirstRow = false) => { data = data.slice(omitFirstRow ? data.indexOf('\n') + 1 : 0) let arr = data.split('\n').map(v => v.split(delimiter)) for(let i = 0; i < arr.length; i++){ for(let j = 0; j < arr[i].length; j++){ if(!isNaN(arr[i][j])){ arr[i][j] = parseFloat(arr[i][j]) } } } return arr; }
问题原因
从Google Sheet单元格通过getValue()获取的字符串中,原有的\n被转义成了字面量的\\n(即实际为两个字符:反斜杠+字母n),而非真正的换行符。此时用split('\n')无法识别这个转义后的序列,导致整串未被分割成两行,反而将2\\n3当作了单个元素。
解决方案
在处理字符串前,先将字面量的\\n全局替换为真正的换行符\n,修改后的函数如下:
const csv_to_array = (data, delimiter = ',', omitFirstRow = false) => { // 替换Google Sheet中获取到的转义换行符为真实换行符 data = data.replace(/\\n/g, '\n'); data = data.slice(omitFirstRow ? data.indexOf('\n') + 1 : 0); let arr = data.split('\n').map(v => v.split(delimiter)); for(let i = 0; i < arr.length; i++){ for(let j = 0; j < arr[i].length; j++){ if(!isNaN(arr[i][j])){ arr[i][j] = parseFloat(arr[i][j]); } } } return arr; }
若单元格中的换行是通过Alt+Enter输入的真实换行,getValue()会直接返回带\n的字符串,此时无需额外替换即可正常运行。
内容的提问来源于stack exchange,提问作者Swiss23
相关产品推荐
相关产品推荐

