如何修改Google Apps Script实现按列追加数据并添加输入列?
需求说明
现有一段Google Apps Script代码,原本是按行追加数据到工作表,需要修改为按列追加数据,同时支持输入工作表添加更多输入列。
原代码
function appendEvLog() { // We will add our code here. const ss = SpreadsheetApp.getActiveSpreadsheet(); // collect the data const sourceRange = ss.getRangeByName("InputData"); const sourceVals = sourceRange.getValues().flat(); // validate all cells are filled const anyEmptyCell = sourceVals.findIndex(cell => cell == ""); if(anyEmptyCell !== -1){ const ui = SpreadsheetApp.getUi(); ui.alert( "Input Incomplete", "Please enter a value in All input cells before submitting", ui.ButtonSet.OK ); return; } // Gather current dts and user email. const date = new Date(); const email = Session.getActiveUser().getEmail(); const data = [date, email, ...sourceVals]; // append the data const destinationSheet = ss.getSheetByName("DataLog"); destinationSheet.appendRow(data); // clear the source sheet rows sourceRange.clearContent(); ss.toast("Success: Item Added to the data Log!"); };
修改后的代码
function appendEvLog() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // 获取输入数据范围 const sourceRange = ss.getRangeByName("InputData"); const sourceVals = sourceRange.getValues(); // 验证所有输入单元格是否填写 let hasEmptyCell = false; for (let row of sourceVals) { if (row.some(cell => cell === "")) { hasEmptyCell = true; break; } } if (hasEmptyCell) { const ui = SpreadsheetApp.getUi(); ui.alert( "输入不完整", "请在提交前填写所有输入单元格", ui.ButtonSet.OK ); return; } // 添加日期和用户邮箱数据 const date = new Date(); const email = Session.getActiveUser().getEmail(); // 整理成按列存储的二维数组格式 const dataToAppend = [[date], [email], ...sourceVals.map(row => [row[0]])]; // 获取目标工作表并按列追加数据 const destinationSheet = ss.getSheetByName("DataLog"); const firstEmptyCol = destinationSheet.getLastColumn() + 1; destinationSheet.getRange(1, firstEmptyCol, dataToAppend.length, 1).setValues(dataToAppend); // 清空输入区域内容 sourceRange.clearContent(); ss.toast("成功:条目已添加到数据日志!"); }
核心修改说明
- 数据结构适配:取消原代码的
flat()扁平化操作,将输入数据转换为按列存储的二维数组格式,确保每一行数据对应目标表的一列单元格 - 追加逻辑替换:放弃
appendRow()行追加方法,改为通过getLastColumn()定位目标表第一个空列,使用setValues()批量写入整列数据 - 验证逻辑优化:适配多列输入场景,遍历所有输入单元格检查是否为空
- 提示本地化:将弹窗和提示文字改为中文,提升使用体验
内容的提问来源于stack exchange,提问作者abs
相关产品推荐
相关产品推荐

