You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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());
  }
}

关键修改说明

  1. 自定义CSV表头

    • 修正数据读取范围:从第2行开始读取内容,避免包含原表格的表头行
    • 在映射后的data数组最前端插入自定义表头数组,确保导出的CSV使用指定表头
  2. 自动删除临时文件

    • 创建临时文件夹时记录其ID,并传递到弹窗函数
    • 在弹窗HTML中添加JavaScript定时器,延迟10秒后调用删除函数,将临时文件夹移至回收站(兼顾自动清理与误操作恢复需求)
    • 新增deleteTempFolder函数,处理文件夹删除逻辑并捕获异常

内容的提问来源于stack exchange,提问作者Micah Noble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:20:36