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

使用Google Apps Script导出CSV前移除首行的实现方案

问题

需要在生成CSV文件前移除数据的第一行,但当前代码未设置数据范围,不清楚该如何操作。现有Google Apps Script函数及HTML代码如下:

原Google Apps Script函数

function autoDownload() {
  let html = HtmlService.createHtmlOutputFromFile('download');
  SpreadsheetApp.getUi().showModalDialog(html, 'CSV download dialog');
  Utilities.sleep(9000);
  
  let subFolderId = idP = DriveApp.getFoldersByName("CSV Creation Temp Folder").next().getId();
  emptyFolder(subFolderId); // SubFolder Id
}

//---------------------------------------------------------------------------------------------
function saveAsCSV() {
  let ss        = SpreadsheetApp.getActiveSpreadsheet(),
      ssname    = "sumApp-Headers",
      sheet     = SpreadsheetApp.getActive().getActiveSheet(),
      ActiveGSN = SpreadsheetApp.getActiveSpreadsheet().getName();
  
  var ParentFolderIdx = createParentAndSubfolder("Header-Maker CSV Download", "CSV Creation Temp Folder");

  let folder = ParentFolderIdx;  Folder Id
  let params = ss.getId() + "/export?exportFormat=csv&format=csv";
  let url    = "https://docs.google.com/spreadsheets/d/" + params;  
  let token  = ScriptApp.getOAuthToken();  

  let response = UrlFetchApp.fetch(url + "&gid=" + sheet.getSheetId(), {
        headers: {
         'Authorization': 'Bearer ' +  token
        }
  });

  url = DriveApp.getFolderById(folder)
                .createFile(ssname, response, MimeType.CSV)
                .getDownloadUrl();
                     
  return url;
}

原HTML代码

<!DOCTYPE html>
<html>
<body>
  Auto Download CSV ... please wait
</body>
<script>
  function executeDownload(url) {
      window.location.href = url;
  }
  window.onload=function() {
    google.script.run
      .withSuccessHandler(executeDownload)
      .saveAsCSV();
    window.setTimeout(function(){google.script.host.close()},9000);
  }
</script>
</html>
解决方案

核心思路是获取CSV原始内容后,移除首行再创建文件,无需调整数据范围。仅需修改saveAsCSV函数,具体实现如下:

修改后的saveAsCSV函数

function saveAsCSV() {
  let ss        = SpreadsheetApp.getActiveSpreadsheet(),
      ssname    = "sumApp-Headers",
      sheet     = SpreadsheetApp.getActive().getActiveSheet(),
      ActiveGSN = SpreadsheetApp.getActiveSpreadsheet().getName();
  
  var ParentFolderIdx = createParentAndSubfolder("Header-Maker CSV Download", "CSV Creation Temp Folder");

  let folder = ParentFolderIdx;  // 修正原代码注释格式
  let params = ss.getId() + "/export?exportFormat=csv&format=csv";
  let url    = "https://docs.google.com/spreadsheets/d/" + params;  
  let token  = ScriptApp.getOAuthToken();  

  let response = UrlFetchApp.fetch(url + "&gid=" + sheet.getSheetId(), {
        headers: {
         'Authorization': 'Bearer ' +  token
        }
  });

  // 新增:移除CSV首行的处理逻辑
  let csvContent = response.getContentText(); // 将二进制响应转为文本格式
  let csvLines = csvContent.split("\n"); // 按换行符分割为行数组
  if (csvLines.length > 1) {
    csvLines.shift(); // 删除数组第一个元素(即CSV首行)
  }
  let processedCsv = csvLines.join("\n"); // 将剩余行重新拼接为CSV文本

  // 使用处理后的文本创建CSV文件
  url = DriveApp.getFolderById(folder)
                .createFile(ssname, processedCsv, MimeType.CSV)
                .getDownloadUrl();
                     
  return url;
}

关键修改说明

  • response.getContentText():把UrlFetch返回的二进制响应转换为可读的CSV文本内容
  • csvLines.shift():直接移除行数组的第一个元素,实现删除CSV首行的效果
  • 增加if (csvLines.length > 1)判断:避免空文件或仅一行数据时出现数组越界错误

原HTML代码无需任何修改,保持原样即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:42:37