使用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
相关产品推荐
相关产品推荐

