Google Sheet CSV导出脚本优化:修改表头+自动删临时文件
解决Google Sheets导出CSV的表头自定义与临时文件自动删除问题
问题分析
原脚本可按指定列导出数据并生成下载链接,但存在两个核心问题:
- 无法替换CSV导出的表头名称(如将
Delivery Product Name改为Short Description) - 生成的临时文件夹和文件需手动清理,缺乏自动删除机制
修改后的完整脚本
function WebInterface_CSVB() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Database'); // 创建临时文件夹并记录ID var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime()); var folderId = folder.getId(); fileName = sheet.getName() + ".csv"; var csvFile = Convert_WebInterfaceB(fileName, sheet); var file = folder.createFile(fileName, csvFile); var downloadURL = file.getDownloadUrl().slice(0, -8); // 传递下载链接和文件夹ID到弹窗 WebInterface_urlB(downloadURL, folderId); } function WebInterface_urlB(downloadURL, folderId) { var htmlContent = ` <a href="${downloadURL}">Click here to download</a> <script> // 延迟10秒后自动删除临时文件夹 setTimeout(function() { google.script.run.deleteTempFolder("${folderId}"); console.log("临时文件夹已自动删除"); }, 10000); </script> `; var link = HtmlService.createHtmlOutput(htmlContent); SpreadsheetApp.getUi().showModalDialog(link, 'Your CSV file is ready!'); } function Convert_WebInterfaceB(csvFileName, sheet) { const wb = SpreadsheetApp.getActiveSpreadsheet(); const sh = wb.getSheetByName("Database"); // 从第2行开始读取数据(跳过原表头行) const allvalues = sh.getRange(2, 1, sh.getLastRow()-1, sh.getLastColumn()).getValues(); const header1 = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues().flat().indexOf("SKU"); const header2 = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues().flat().indexOf("Delivery Product Name"); const header3 = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues().flat().indexOf("Delivery Product Description"); var date1 = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd"); var date2 = Utilities.formatDate(new Date(new Date().setFullYear(new Date().getFullYear() + 1)), "GMT+1", "yyyy-MM-dd"); // 映射所需列并添加日期列 var data = allvalues.map(function(o){return [o[header1], o[header2], o[header3], date1, date2]}); // 插入自定义表头 data.unshift(['SKU', 'Short Description', 'Full Description', 'From Date', 'To Date']); try { var csvFile = undefined; if (data.length > 0) { var csv = ""; for (var row = 0; row < data.length; row++) { for (var col = 0; col < data[row].length; col++) { // 处理包含逗号的字段,添加双引号包裹 if (data[row][col].toString().indexOf(",") !== -1) { data[row][col] = `"${data[row][col]}"`; } } csv += data[row].join(",") + "\r\n"; } csvFile = csv; } return csvFile; } catch(err) { Logger.log(err); Browser.msgBox(err); } } function deleteTempFolder(folderId) { try { var folder = DriveApp.getFolderById(folderId); // 将文件夹移至回收站(可恢复,比直接删除更安全) folder.setTrashed(true); } catch(e) { Logger.log("删除临时文件夹失败: " + e.toString()); } }
关键修改说明
自定义CSV表头
- 修正数据读取范围:从第2行开始读取内容,避免包含原表格的表头行
- 在映射后的
data数组最前端插入自定义表头数组,确保导出的CSV使用指定表头
自动删除临时文件
- 创建临时文件夹时记录其ID,并传递到弹窗函数
- 在弹窗HTML中添加JavaScript定时器,延迟10秒后调用删除函数,将临时文件夹移至回收站(兼顾自动清理与误操作恢复需求)
- 新增
deleteTempFolder函数,处理文件夹删除逻辑并捕获异常
内容的提问来源于stack exchange,提问作者Micah Noble
相关产品推荐
相关产品推荐

