当主表新增行时将指定列数据复制至另一电子表格
嘿,我看你已经搭好了代码的基础框架,接下来帮你补全并优化,刚好能实现从表单填充的主表复制指定列到另一个表格的需求!
首先,补全并优化你的现有代码(针对复制最新表单提交行的指定列)
这里假设你要复制的是主表里最新的那一行(也就是刚提交的表单记录)的指定列:
function myFunction() { // 1. 打开源工作表(表单填充的主表) const sourceSS = SpreadsheetApp.openById("1o8_hOUvPG254AFm61lz9Qn1_HwxMUSI-WM"); const sourceSheet = sourceSS.getSheetByName('Clientsheet'); const sourceData = sourceSheet.getDataRange().getValues(); // 2. 定义需要提取的列索引(注意是0开始的,对应你说的第0、6、9、10、15列) const targetColumns = [0, 6, 9, 10, 15]; // 3. 获取最新的一行表单数据 const latestRow = sourceData[sourceData.length - 1]; // 4. 从最新行中提取指定列的数据 const filteredRow = targetColumns.map(colIndex => latestRow[colIndex]); // 5. 打开目标工作表 const targetSS = SpreadsheetApp.openById("1N-2BN3-4HHdpMWso58ndJGGaEugWCaP6fleT4"); // 这里把你没写完的表名补全,比如改成实际的'Outward' const targetSheet = targetSS.getSheetByName('Outward'); // 6. 将提取的数据追加到目标表的最后一行 targetSheet.appendRow(filteredRow); }
如果你需要复制所有行的指定列(而不是仅最新一行)
可以用这个版本,会把主表里所有行的指定列都同步到目标表:
function copyAllRowsSpecifiedColumns() { const sourceSS = SpreadsheetApp.openById("1o8_hOUvPG254AFm61lz9Qn1_HwxMUSI-WM"); const sourceSheet = sourceSS.getSheetByName('Clientsheet'); const sourceData = sourceSheet.getDataRange().getValues(); const targetColumns = [0, 6, 9, 10, 15]; // 遍历所有行,提取每一行的指定列数据 const filteredData = sourceData.map(row => targetColumns.map(colIndex => row[colIndex])); const targetSS = SpreadsheetApp.openById("1N-2BN3-4HHdpMWso58ndJGGaEugWCaP6fleT4"); const targetSheet = targetSS.getSheetByName('Outward'); // 可选:如果需要覆盖目标表现有数据,可以取消下面这行注释 // targetSheet.clearContents(); // 将处理好的数据写入目标表(从A1单元格开始) targetSheet.getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData); }
几个关键注意点:
- 确保两个表格的ID完全正确,不要漏字符或写错
- 目标工作表的名称要准确,Google Sheets的表名是大小写敏感的
- 如果要实现表单提交后自动执行,建议把函数设置为可安装的onFormSubmit触发器,这样不用手动运行代码
- 再次确认列索引:这里用的是0开始的索引,比如Excel里的A列对应第0列,你说的第0列就是A列,没问题
内容的提问来源于stack exchange,提问作者Yogesh Dangi
相关产品推荐
相关产品推荐

