使用Google Script同步库存数据到History表仅首行保存问题求助
问题根因
你当前脚本中使用的getValue()方法仅能读取指定范围的左上角第一个单元格的值,你选取了A2:A500这类多单元格范围,实际仅能获取到A2、B2等首行单元格的内容,因此写入History表时只会保存首行数据。
修复后的完整代码
function submitData1() { var ss= SpreadsheetApp.getActiveSpreadsheet(); var shUserForm= ss.getSheetByName("In-Inventory"); var datasheet = ss.getSheetByName("DatabaseINVENTORY"); var ui = SpreadsheetApp.getUi(); var response = ui.alert("Submit", 'PASTIKAN SUDAH BENAR, YAKIN MAU SIMPAN DATA?',ui.ButtonSet.YES_NO); if (response == ui.Button.NO) { return; } // 批量读取IN表所有数据 var sourceValues = shUserForm.getRange("A2:F500").getValues(); // 过滤空行,仅保留第一列有内容的有效行 var validRows = sourceValues.filter(row => row[0]?.toString().trim() !== ""); if (validRows.length === 0) { ui.alert("未检测到可保存的有效数据"); return; } // 批量写入History表 var blankStartRow = datasheet.getLastRow() + 1; datasheet.getRange(blankStartRow, 1, validRows.length, 6).setValues(validRows); ui.alert('REKAP INVENTORY TERSIMPAN'); // 清空原表指定范围内容 shUserForm.getRange("A2:A500").clearContent(); shUserForm.getRange("C2:C500").clearContent(); shUserForm.getRange("D2:D500").clearContent(); return true ; }
注意事项
如果要同步处理OUT表的数据,只需要复制一份该函数,将shUserForm对应的表名修改为OUT表的名称即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Ferry
相关产品推荐
相关产品推荐

