求助Google Sheets Apps Script批量处理列值及复制指定行
Google Sheets Apps Script 解决方案
以下是实现你需求的完整脚本,它会遍历整个工作表,而非仅录制时的特定行:
function updateAndCopyRows() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); const numRows = values.length; // 步骤1-3:将T列(索引19,数组从0开始计数)的"In review"改为"Done" for (let i = 1; i < numRows; i++) { // 跳过表头行,无表头则改为i=0 if (values[i][19] === "In review") { values[i][19] = "Done"; } } dataRange.setValues(values); // 步骤4:收集T列为"Done"的行中A-L、N-R列的数据并复制到剪贴板 const targetData = []; for (let i = 1; i < numRows; i++) { // 跳过表头行,无表头则改为i=0 if (values[i][19] === "Done") { const rowData = []; // 提取A-L列(索引0到11) for (let col = 0; col <= 11; col++) { rowData.push(values[i][col]); } // 提取N-R列(索引13到17) for (let col = 13; col <= 17; col++) { rowData.push(values[i][col]); } targetData.push(rowData); } } // 将筛选后的数据复制到剪贴板 if (targetData.length > 0) { const tempSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(); tempSheet.getRange(1, 1, targetData.length, targetData[0].length).setValues(targetData); tempSheet.getDataRange().copyTo(SpreadsheetApp.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); SpreadsheetApp.getActiveSpreadsheet().deleteSheet(tempSheet); } }
关键说明:
- 脚本直接操作整个数据区域,彻底解决录制宏仅作用于特定行的问题
- T列对应数组索引19(A列是索引0,以此类推)
- 若你的表格没有表头,将循环中的
i=1替换为i=0即可 - 复制到剪贴板通过临时工作表实现,确保数据格式正确
内容的提问来源于stack exchange,提问作者hoffCA
相关产品推荐
相关产品推荐

