Google Apps Script导入CSV:仅依据前4列确定插入位置
解决Google Apps Script导入CSV时仅依据指定列判断插入位置的问题
问题描述
用Google Apps Script写的CSV导入脚本,原本要把数据导入表格A:E列,但当H列等非目标列存在数据时,脚本会在这些数据的下方开始导入,而非在A:E列的最后一行下方插入。需要修改脚本,仅根据前4列(A-D)的数据判断插入起始位置。
修改后的代码
function writeDataToSheet(data) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Import"); // 获取A-D列数据,从底部向上查找最后一行有内容的行号 const targetColData = sheet.getRange("A:D").getValues(); let lastTargetRow = 1; // 默认表头行(第1行) for (let i = targetColData.length - 1; i >= 0; i--) { // 检查当前行是否有非空单元格 if (targetColData[i].some(cell => cell.toString().trim() !== "")) { lastTargetRow = i + 1; // 转换为表格实际行号(数组索引从0开始) break; } } // 在目标列最后一行的下一行插入数据 const range = sheet.getRange(lastTargetRow + 1, 1, data.length, data[0].length); range.setValues(data); return sheet.getName(); }
关键说明
- 放弃使用
sheet.getLastRow()(该方法会受所有列数据影响),单独获取A-D列的所有数据,从底部向上遍历,找到最后一行包含非空内容的行号。 - 通过
some()方法检查每行的A-D列是否有非空值,确保精准定位目标列的最后有效行。 - 插入位置设为
lastTargetRow + 1,保证CSV数据从目标列的最后有效行下方开始写入。
数据表格示例
| Col A | Col B | Col C | Col D | Col E | .... | Col H |
|---|---|---|---|---|---|---|
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | ||||||
| DATA | ||||||
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... | |
| DATA | DATA | DATA | DATA | DATA | .... |
内容的提问来源于stack exchange,提问作者Heath Atchley
相关产品推荐
相关产品推荐

