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

Google Sheets转文本文档脚本优化:多工作表多行适配

解决方案:适配多工作表+自动触发的Google Sheets脚本

我来帮你完善这个脚本,实现遍历所有工作表生成文件、新增工作表/行时自动创建对应资源的功能,分核心逻辑和自动触发两部分来讲:

一、核心功能:遍历所有工作表生成文件

这个函数会一次性处理当前表格里的所有工作表,为每个工作表创建对应文件夹,再按每行A/B列内容生成文本文档:

function createAllDocs() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const allSheets = spreadsheet.getSheets(); // 获取所有工作表

  allSheets.forEach(sheet => {
    const sheetName = sheet.getName();
    
    // 1. 查找或创建以工作表命名的文件夹
    let targetFolder;
    const folderIterator = DriveApp.getFoldersByName(sheetName);
    if (folderIterator.hasNext()) {
      targetFolder = folderIterator.next();
    } else {
      targetFolder = DriveApp.createFolder(sheetName);
      console.log(`新建文件夹:${sheetName}`);
    }

    // 2. 获取工作表数据(跳过第一行表头)
    const sheetData = sheet.getDataRange().getValues().slice(1);
    
    // 3. 遍历每行生成文件
    sheetData.forEach(row => {
      const docName = row[0]; // A列:文件名
      const docContent = row[1]; // B列:文件内容

      // 跳过空行(A或B列为空则不处理)
      if (!docName || !docContent) return;

      // 检查文件夹中是否已有同名文件,避免重复创建
      const fileIterator = targetFolder.getFilesByName(`${docName}.txt`);
      if (!fileIterator.hasNext()) {
        targetFolder.createFile(`${docName}.txt`, docContent);
        console.log(`已创建文件:${docName}.txt(位于${sheetName}文件夹)`);
      } else {
        console.log(`文件${docName}.txt已存在,跳过创建`);
      }
    });
  });
}

二、自动触发:新增工作表/行时自动执行

要实现“新增工作表/行就自动创建资源”,需要结合Google Apps Script的可安装触发器(因为涉及Drive操作,简单触发权限不足):

1. 处理新增工作表的触发器函数

当你在表格里新增工作表时,自动为这个新表创建文件夹并生成对应文件:

function onSheetAdded(e) {
  // 仅响应"插入工作表"的操作
  if (e.changeType !== 'INSERT_GRID') return;

  const newSheet = e.source.getActiveSheet();
  const sheetName = newSheet.getName();

  // 查找或创建文件夹
  let targetFolder;
  const folderIterator = DriveApp.getFoldersByName(sheetName);
  if (folderIterator.hasNext()) {
    targetFolder = folderIterator.next();
  } else {
    targetFolder = DriveApp.createFolder(sheetName);
    console.log(`自动新建文件夹:${sheetName}`);
  }

  // 处理新表的现有行(跳过表头)
  const sheetData = newSheet.getDataRange().getValues().slice(1);
  sheetData.forEach(row => {
    const docName = row[0];
    const docContent = row[1];
    if (!docName || !docContent) return;

    const fileIterator = targetFolder.getFilesByName(`${docName}.txt`);
    if (!fileIterator.hasNext()) {
      targetFolder.createFile(`${docName}.txt`, docContent);
      console.log(`自动创建文件:${docName}.txt`);
    }
  });
}

2. 处理新增行的触发器函数

当你在任意工作表中新增行并填写A/B列内容时,自动生成对应文本文档:

function onRowAdded(e) {
  const editedRange = e.range;
  const sheet = editedRange.getSheet();
  const editedRow = editedRange.getRow();
  const editedCol = editedRange.getColumn();

  // 仅处理表头下方的行(行号>1),且编辑的是A/B列
  if (editedRow <= 1 || !(editedCol === 1 || editedCol === 2)) return;

  const docName = sheet.getRange(editedRow, 1).getValue();
  const docContent = sheet.getRange(editedRow, 2).getValue();

  // 内容为空则跳过
  if (!docName || !docContent) return;

  // 查找当前工作表对应的文件夹
  const sheetName = sheet.getName();
  let targetFolder;
  const folderIterator = DriveApp.getFoldersByName(sheetName);
  if (folderIterator.hasNext()) {
    targetFolder = folderIterator.next();
  } else {
    targetFolder = DriveApp.createFolder(sheetName);
    console.log(`自动新建文件夹:${sheetName}`);
  }

  // 检查文件是否存在,不存在则创建
  const fileIterator = targetFolder.getFilesByName(`${docName}.txt`);
  if (!fileIterator.hasNext()) {
    targetFolder.createFile(`${docName}.txt`, docContent);
    console.log(`自动创建行对应文件:${docName}.txt`);
  }
}

三、设置可安装触发器

脚本写完后,需要手动添加触发器才能让自动功能生效:

  1. 打开Google Sheets的脚本编辑器(点击「扩展程序」→「Apps Script」)
  2. 点击左侧「触发器」图标(时钟形状)
  3. 点击「添加触发器」,分别设置两个触发器:
    • 对于onSheetAdded:选择事件类型为「更改」,事件源为「从电子表格」
    • 对于onRowAdded:选择事件类型为「编辑」,事件源为「从电子表格」
  4. 保存并授权(首次授权需要允许脚本访问你的Drive和Sheets)

四、注意事项

  • 脚本会自动跳过空行和已存在的文件,避免重复操作
  • 如果你的表头不是第一行,可以修改slice(1)为slice(N)(N是表头行数)
  • 文件名不能包含Drive禁止的字符(比如/ \ : * ? " < > |),建议在表格里做输入限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:50:52