Google Sheets脚本误删需保留公式的A列,求修复方案
问题分析与修正脚本
问题根源
- A列公式被误删:原脚本中
pedidosSheet.deleteRows(2, lastRow - 1)会删除第2行及以下的所有行,包括A列的行,直接清空了表头下方A列的公式。 - Excel导出方式错误:用
getValues()生成的文件并非标准Excel格式,可能导致附件无法正常解析。 - 冗余代码干扰:导出阶段修改表头的代码完全没必要,还会破坏原表结构。
修正后的完整脚本
function sendExcelAndDeleteRows() { var spreadsheetId = "####"; // 替换为你的表格ID var emailAddress = "###"; // 替换为收件邮箱 var subject = "Excel Sheet - Pedidos"; var message = "Please find attached the Excel sheet for Pedidos."; // 导出Pedidos表为标准Excel文件 var spreadsheet = SpreadsheetApp.openById(spreadsheetId); var pedidosSheet = spreadsheet.getSheetByName("Pedidos"); var dateToday = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd"); var pedidosFileName = "Pedidos_" + dateToday + ".xlsx"; // 通过Google Sheets导出URL获取标准Excel文件 var exportUrl = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?exportFormat=xlsx&gid=" + pedidosSheet.getSheetId(); var authToken = ScriptApp.getOAuthToken(); var exportResponse = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': 'Bearer ' + authToken } }); var pedidosFile = DriveApp.createFile(pedidosFileName, exportResponse.getBlob(), MimeType.MICROSOFT_EXCEL); // 发送邮件 MailApp.sendEmail(emailAddress, subject, message, { attachments: [pedidosFile] }); // 清理Test表:删除表头下方所有行 var testSheet = spreadsheet.getSheetByName("Test"); if (testSheet.getLastRow() > 1) { testSheet.deleteRows(2, testSheet.getLastRow() - 1); } // 清理Pedidos表:仅删除A列以外的列,保留A列所有单元格的公式 var lastColumn = pedidosSheet.getLastColumn(); if (lastColumn > 1) { pedidosSheet.deleteColumns(2, lastColumn - 1); } // 删除临时文件 pedidosFile.setTrashed(true); } function createTrigger() { ScriptApp.newTrigger('sendExcelAndDeleteRows') .timeBased() .onWeekDay(ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRIDAY) .atHour(20) .nearMinute(30) .create(); }
关键修改说明
- 移除行删除操作:删掉了
pedidosSheet.deleteRows(2, lastRow - 1),确保A列所有行的公式完整保留。 - 修复Excel导出逻辑:改用Google官方导出URL生成标准Excel文件,保证附件格式正确。
- 删除冗余代码:移除了导出阶段修改表头的无效代码,避免破坏原表结构。
- 增加边界判断:为Test表的行删除操作增加了
getLastRow() > 1的判断,防止空表时报错。
内容的提问来源于stack exchange,提问作者bbaik
相关产品推荐
相关产品推荐

