如何在Google Apps Script的appendRow中插入其他单元格的值?
解决Google Apps Script表单提交追加缺失字段的问题
表单结构
| DATE : | Entity Name : | Office : | ||
|---|---|---|---|---|
| ID | STOCK NO. | UNIT | DESCRIPTION | QUANTITY |
| 1 | JTL-0005 | PC | BROOM, SOFT (TAMBO) | 1 |
目标输出(目标工作表)
| DATE | ENTITY NAME | OFFICE | ID | STOCK NO. | UNIT | DESCRIPTION | QUANTITY |
|---|---|---|---|---|---|---|---|
| (填写的日期) | (填写的实体名) | (填写的部门) | 1 | JTL-0005 | PC | BROOM, SOFT (TAMBO) | 1 |
修改后的完整代码
function btn_dataEntryPrevSubmit(){ var ui = SpreadsheetApp.getUi(); var response = ui.alert('Are you sure you want to continue?', ui.ButtonSet.YES_NO); if (response == ui.Button.YES) { // 获取表单中需要的固定字段值 const deDate = formDE.getRange("F4").getValue(); const deEntityName = formDE.getRange("F8").getValue(); const deOffice = formDE.getRange("F10").getValue(); const idCell = formDE.getRange("A4"); let currentID = idCell.getValue(); // 获取表格行数据并过滤空行 let dataEntryRange = formDE.getRange("D14:H"); let values = dataEntryRange.getValues().filter(row => row.some(cell => cell !== "")); for(let index = 0; index < values.length; index++){ // 按目标顺序拼接数据:DATE -> ENTITY NAME -> OFFICE -> ID -> 行数据 const rowData = [deDate, deEntityName, deOffice, currentID, ...values[index]]; db_RequisitionOffice.appendRow(rowData); // 更新ID值 currentID++; idCell.setValue(currentID); } // 清空表单输入区域 const dataEntryFieldRangeForDeletion = ["D14:H"]; dataEntryFieldRangeForDeletion.forEach(f => formDE.getRange(f).clearContent()); // 提交成功提示 ui.alert('Successfully submitted request!', ui.ButtonSet.OK); } }
关键修改说明
- 补全固定字段取值:取消注释并添加
.getValue(),实际获取DATE、Entity Name、Office的内容,而非仅获取单元格对象。 - 过滤空行:添加
filter(row => row.some(cell => cell !== "")),避免追加表格中无内容的空行。 - 按目标顺序拼接数据:使用数组展开语法严格匹配目标工作表的列顺序,确保字段位置正确。
- 优化ID处理:提前获取当前ID,循环内直接递增,减少重复读取单元格的操作,提升效率。
- 调整提示位置:将成功提示移到
YES分支内,仅在提交完成后弹出,避免误触发。
内容的提问来源于stack exchange,提问作者Lyndon Broz Tonelete
相关产品推荐
相关产品推荐

