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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:24:51