如何将谷歌表格两列数据合并导入单列?Google Apps Script求助
谷歌表格脚本修正:合并E/F列到目标工作表D列
你原脚本里合并E、F列的写法有误,entry_location1 && entry_location2这种逻辑运算符无法处理二维数组格式的表格数据。下面是修正后的完整脚本,核心是通过遍历数组将对应行的E、F列内容拼接:
//Section A: Form Response Data collection. function dewarData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName('Form Response Data'); // 动态获取数据最后一行,避免硬写固定行数 var lastRow = sheet1.getLastRow(); var entry_date = sheet1.getRange(2, 1, lastRow - 1, 1).getValues(); var entry_shift = sheet1.getRange(2, 2, lastRow - 1, 1).getValues(); var entry_type = sheet1.getRange(2, 4, lastRow - 1, 1).getValues(); var entry_location1 = sheet1.getRange(2, 5, lastRow - 1, 1).getValues(); var entry_location2 = sheet1.getRange(2, 6, lastRow - 1, 1).getValues(); var entry_ser_type = sheet1.getRange(2, 47, lastRow - 1, 1).getValues(); // AU列对应数字索引47 // 合并E、F列数据:遍历每一行拼接内容,同时处理空值 var mergedLocations = []; for (var i = 0; i < entry_location1.length; i++) { var loc1 = entry_location1[i][0] || ''; var loc2 = entry_location2[i][0] || ''; // 用空格分隔两个地址,可自行替换成其他分隔符(比如"/"、"-") var mergedContent = loc1 + (loc1 && loc2 ? ' ' : '') + loc2; mergedLocations.push([mergedContent]); // 保持二维数组格式,适配setValues要求 } // Section B: 写入到Data Overview工作表 var sheet2 = ss.getSheetByName('Data Overview'); var targetStartRow = 3; sheet2.getRange(targetStartRow, 1, mergedLocations.length, 1).setValues(entry_date); sheet2.getRange(targetStartRow, 2, mergedLocations.length, 1).setValues(entry_shift); sheet2.getRange(targetStartRow, 3, mergedLocations.length, 1).setValues(entry_type); sheet2.getRange(targetStartRow, 4, mergedLocations.length, 1).setValues(mergedLocations); sheet2.getRange(targetStartRow, 5, mergedLocations.length, 1).setValues(entry_ser_type); }
关键修改说明:
- 合并逻辑:通过循环遍历每一行的E、F列数据,将两个单元格内容拼接成字符串,同时判断空值避免出现多余的分隔符。注意
setValues()要求传入二维数组,所以每个合并后的内容需要放在子数组中再存入结果数组。 - 动态行数优化:用
getLastRow()获取实际数据的最后一行,替代原脚本中硬写的350行,既不会处理空行,也不会漏掉新增的表单数据。 - 列索引优化:改用数字索引定位AU列(第47列),比直接用列名更稳定,避免列名修改导致脚本失效。
内容的提问来源于stack exchange,提问作者trend
相关产品推荐
相关产品推荐

