如何用Google Apps Script将TXT转为Google文档?遇报错求解决
用Google Apps Script将Google表格转为带格式Google文档的问题解决
问题说明
我想通过Google Apps Script把Google表格转换成带格式的Google文档(需要删除前5行内容、设置字体),目前能成功把表格转成.txt文件,但尝试转Google文档时持续报错,注释掉了失败的尝试代码,求排查问题并给出可行方案。
原尝试代码
// script to be run on below noted folder and output to second specified folder in same drive // converts spreadsheets to TXT files function convertSpreadsheetsToDocs() { const mainFolderName = "Test Spreadsheets"; // Replace with your main folder name const subFolderName = "Subfolder5"; // Replace with your subfolder name const mainFolder = DriveApp.getFoldersByName(mainFolderName).next(); const subFolder = mainFolder.createFolder(subFolderName); // Create a subfolder const spreadsheets = mainFolder.getFilesByType(MimeType.GOOGLE_SHEETS); while (spreadsheets.hasNext()) { const spreadsheet = spreadsheets.next(); const spreadsheetName = spreadsheet.getName(); const docName = spreadsheetName + " (Converted)"; const doc = DocumentApp.create(docName); const sheet = SpreadsheetApp.openById(spreadsheet.getId()).getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); dataRange.setNumberFormat("@"); // Set cell format as plain text let text = values.map(row => row.join("\t")).join("\n"); // Convert data to tab-delimited text // Replace carriage return with page break text = text.replace(/\n/g, "\n\n"); // Replace tab with carriage return text = text.replace(/\t/g, "\n"); const blob = Utilities.newBlob(text, MimeType.PLAIN_TEXT); // const blob = Utilities.newBlob(text, MimeType.GOOGLE_DOCS); const docFile = subFolder.createFile(blob.setName(docName + ".txt")); // File.setContentType(MimeType.GOOGLE_DOCS); DriveApp.getFileById(doc.getId()).setTrashed(true); // Delete the temporary Google Doc } Logger.log("Spreadsheets converted to text file successfully."); }
问题分析
原代码的核心问题是绕了弯路:先创建临时Google Doc又删除,转而生成txt文件,再尝试通过修改MIME类型转Google文档——这种方式不可行,因为Google Docs不能直接通过修改纯文本文件的MIME类型生成。正确的做法是直接从表格数据生成并格式化Google文档,不需要中间的txt转换步骤。
修正后的代码
function convertSpreadsheetsToFormattedDocs() { const mainFolderName = "Test Spreadsheets"; // 主文件夹名称 const subFolderName = "Subfolder5"; // 输出子文件夹名称 const targetFont = "Arial"; // 目标字体 const fontSize = 12; // 字体大小 // 获取主文件夹并创建子文件夹(避免重复创建) const mainFolder = DriveApp.getFoldersByName(mainFolderName).next(); let subFolder; const existingSubFolders = mainFolder.getFoldersByName(subFolderName); subFolder = existingSubFolders.hasNext() ? existingSubFolders.next() : mainFolder.createFolder(subFolderName); // 遍历主文件夹中的所有Google表格 const spreadsheets = mainFolder.getFilesByType(MimeType.GOOGLE_SHEETS); while (spreadsheets.hasNext()) { const spreadsheet = spreadsheets.next(); const spreadsheetName = spreadsheet.getName(); const docName = spreadsheetName + " (Converted)"; // 创建新的Google文档 const doc = DocumentApp.create(docName); const body = doc.getBody(); // 读取表格数据并跳过前5行 const sheet = SpreadsheetApp.openById(spreadsheet.getId()).getActiveSheet(); const values = sheet.getDataRange().getValues(); const filteredValues = values.slice(5); // 将数据写入文档并设置格式 filteredValues.forEach(row => { const rowText = row.join("\n"); const paragraph = body.appendParagraph(rowText); paragraph.setFontFamily(targetFont).setFontSize(fontSize); body.appendParagraph(""); // 行之间添加空行分隔 }); // 将文档从根目录移动到目标子文件夹 DriveApp.getFileById(doc.getId()).moveTo(subFolder); Logger.log(`已完成转换:${docName}`); } Logger.log("所有表格转换完成!"); }
关键改进点
- 跳过前5行:用
values.slice(5)直接截取需要的行数据,无需额外处理文本内容 - 直接操作Google文档:创建文档后直接向body写入内容并设置格式,省去中间txt转换步骤
- 字体格式化:给每个段落设置指定的字体和字号
- 避免重复创建文件夹:先检查子文件夹是否存在,存在则复用
- 文档移动:将默认创建在根目录的文档移动到指定子文件夹
内容的提问来源于stack exchange,提问作者David Neff
相关产品推荐
相关产品推荐

