Google Sheets中App Script写入数据不完整问题求助
我用以下App Script代码将POLYGON格式文本转换成包含lat(纬度)和lng(经度)的JSON数组,控制台输出完整准确,但写入Google Sheets单元格时仅显示部分内容,请求排查。
用到的代码
function myFunction() { const sheetName = "Sheet1"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); const lastRow = sheet.getLastRow(); for (var i = 2; i < lastRow +1; i++) { var value = sheet.getRange(i,1).getValue(); const r1 = value.match(/\(\((.*)\)\)/); const r2 = r1[1].split(",").map(e => { const [lng, lat] = e.trim().split(" "); return { lat: Number(lat), lng: Number(lng) }; }); const res = [r2] var cell = sheet.getRange(i,2); cell.setValue(res); console.log(res); } }
输入的POLYGON文本
POLYGON ((-111.705934405 32.76300316, -111.706191897 32.748205765,
-111.706191897 32.748205765, -111.706191897 32.748205765, -111.688682437 32.748566707, -111.688939929 32.733261511, -111.655036807 32.732828307, -111.655294299 32.740914437, -111.645938754 32.740842243, -111.646024585 32.748783271, -111.654607654 32.74914421, -111.654092669 32.763291866, -111.705934405 32.76300316))
问题原因
Google Sheets的setValue()方法直接写入嵌套对象数组时,无法完整解析并展示复杂结构,只会显示类似[object Object]的顶层标识,所以只能看到部分内容。而控制台能完整输出是因为它支持直接打印对象结构。
解决方案
把转换后的数组转成JSON字符串再写入单元格,就能完整显示所有内容。修改代码中写入单元格的那一行:
将cell.setValue(res);替换为cell.setValue(JSON.stringify(res));
修改后的完整代码
function myFunction() { const sheetName = "Sheet1"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); const lastRow = sheet.getLastRow(); for (var i = 2; i < lastRow +1; i++) { var value = sheet.getRange(i,1).getValue(); const r1 = value.match(/\(\((.*)\)\)/); const r2 = r1[1].split(",").map(e => { const [lng, lat] = e.trim().split(" "); return { lat: Number(lat), lng: Number(lng) }; }); const res = [r2]; var cell = sheet.getRange(i,2); // 转换为JSON字符串写入,确保完整显示 cell.setValue(JSON.stringify(res)); console.log(res); } }
内容的提问来源于stack exchange,提问作者user8702720

