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

Google Sheets中Apps Script拆分HTML标签的异常问题修复请求

问题分析与解决方案

需求说明

通过Apps Script拆分文章内容,规则如下:

  • 第一列存放<h1>标签内容
  • 第二列存放第一个<h2>标签内容,对应列存放该<h2>下所有<p>段落
  • 后续<h2>依次类推,到第7个<h2>后,剩余内容统一放入最后一列

问题排查

当前代码仅最后一行文章处理异常,原因是<p>段落中包含额外嵌套HTML标签,这些行没有以<p>开头,被误判为非<p>内容,未归入对应<p>列。

修改后的代码

function splitArticleContent() {
  const sheetName = "Sheet1"; // 设置工作表名称

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const range = sheet.getRange("A3:A" + sheet.getLastRow());
  const temp1 = range.getValues().map(([a]) =>
    a.split("\n").reduce((o, e, i, arr) => {
      let m = e.match(/^<(.*?)>/);
      let tag = m ? m[1].toUpperCase() : "";
      
      // 判断当前行是否是新的标题标签(H1/H2)
      const isHeadingTag = tag === "H1" || tag === "H2";
      
      if (isHeadingTag) {
        // 如果正在收集P段落,先把已收集的P存入结果
        if (o.temp.length > 0) {
          o.res.push(o.temp);
          o.temp = [];
        }
        // 添加标题内容
        o.res.push([e]);
      } else {
        // 非标题标签,判断是否处于P段落收集状态
        // 如果temp已有内容,或者当前行属于P段落的一部分(包括嵌套标签)
        if (o.temp.length > 0 || tag === "P") {
          o.temp.push(e);
        }
        // 处理最后一行,确保剩余的P内容被存入
        if (i === arr.length - 1 && o.temp.length > 0) {
          o.res.push(o.temp);
          o.temp = [];
        }
      }
      return o;
    }, { res: [], temp: [] }).res
  ).map(e => e.map(f => f.join("\n")));
  
  const res = temp1.map(r => {
    let n = 0;
    // 找到第7个H2的位置
    const idx = r.findIndex(e => {
      if (e && e.toUpperCase().includes("H2")) {
        n++;
        return n === 7;
      }
      return false;
    });
    // 拆分:前7个H2相关内容 + 剩余内容合并
    if (idx > -1) {
      return [...r.splice(0, idx + 1), r.join("\n").trim()];
    } else {
      return r;
    }
  });
  
  const maxLen = Math.max(...res.map(r => r.length));
  const values = res.map(r => [...r, ...Array(maxLen - r.length).fill(null)]);
  range.offset(0, 2, values.length, values[0].length).setValues(values);
}

关键修改点

  1. 调整段落收集逻辑:不再仅通过行首标签判断是否为<p>内容,而是通过「是否处于<p>收集状态」来判断——只要已经开始收集<p>段落,后续的嵌套标签行都会被归入当前段落。
  2. 修正第7个H2的定位:改用findIndex更准确地找到第7个<h2>的位置,确保拆分点正确。
  3. 完善最后一行处理:无论最后一行是什么标签,只要有未完成的<p>收集,都会被存入结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:35:17