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

如何用Apps Script自动从HTML文件提取数据至Google Sheets?

解决方案:自动处理Drive文件夹中的HTML文件并同步到Google Sheets

完整代码实现

直接复制以下代码到Google Sheets的脚本编辑器(工具→脚本编辑器),替换对应参数即可使用:

function syncHtmlToSheets() {
  // 替换成你的目标Drive文件夹ID和Sheet名称
  const FOLDER_ID = "你的Drive文件夹ID";
  const SHEET_NAME = "数据跟踪表";
  
  // 获取目标文件夹和目标Sheet
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  
  // 遍历文件夹内所有HTML文件
  const files = folder.getFilesByType(MimeType.HTML);
  while (files.hasNext()) {
    const file = files.next();
    // 跳过已经处理过的文件(通过"已处理"标签判断)
    if (file.getLabels().includes("已处理")) continue;
    
    // 读取HTML文件内容
    const htmlContent = file.getBlob().getDataAsString();
    
    // 解析HTML中的表格(默认取页面第一个表格,可按需调整)
    try {
      const doc = XmlService.parse(htmlContent);
      const root = doc.getRootElement();
      const tables = root.getDescendants(XmlService.getNamespace(null), "table");
      
      if (tables.length === 0) {
        file.addLabel("已处理"); // 标记无表格的文件,避免重复扫描
        continue;
      }
      
      // 提取表格的行和单元格数据
      const tableData = [];
      const rows = tables[0].getChildren("tr");
      rows.forEach(row => {
        const rowData = [];
        // 同时提取表头(<th>)和单元格(<td>)内容
        const cells = row.getChildren("td").concat(row.getChildren("th"));
        cells.forEach(cell => {
          rowData.push(cell.getText().trim()); // 去除多余空格
        });
        tableData.push(rowData);
      });
      
      // 将数据追加到Sheet的末尾
      if (tableData.length > 0) {
        const lastRow = sheet.getLastRow();
        sheet.getRange(lastRow + 1, 1, tableData.length, tableData[0].length).setValues(tableData);
      }
    } catch (e) {
      // 如果HTML解析出错,标记为"处理失败",方便排查
      file.addLabel("处理失败");
      console.log(`处理文件${file.getName()}出错: ${e.message}`);
      continue;
    }
    
    // 标记文件为已处理,避免重复同步
    file.addLabel("已处理");
  }
}

配置步骤

  • 获取Drive文件夹ID:打开目标Drive文件夹,地址栏中folders/后面的字符串就是ID,复制替换代码里的FOLDER_ID。
  • 设置Sheet名称:把代码里的SHEET_NAME改成你的数据跟踪表的实际名称。
  • 首次授权测试:在脚本编辑器中点击运行按钮,第一次会弹出授权请求,按照提示完成权限验证(需要允许脚本访问Drive和Sheets)。
  • 设置自动触发:点击编辑器左侧的时钟图标(触发器),添加新触发器:
    • 选择函数:syncHtmlToSheets
    • 事件源:选「时间驱动」(比如每天固定时间运行一次),或者选「从Drive触发」(当文件夹有新文件添加时自动运行,需在高级设置里配置)。

关键调整说明

  • 多表格筛选:如果你的HTML里有多个表格,不想取第一个,可以通过表格的class或ID筛选。比如把tables[0]改成:
    const targetTable = tables.find(table => table.getAttribute("class") === "jira-table");
    
  • 编码兼容:如果HTML出现乱码,把getDataAsString()改成getDataAsString("UTF-8")或对应编码。
  • 重新处理文件:如果需要重新处理某个文件,只需在Drive中移除该文件的「已处理」标签即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:20