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

如何在Google Apps Script中将段落HTML字符串转为无标签纯文本

你代码存在的核心问题

  • 使用XmlService.parse()处理非严格规范的HTML:该方法仅支持符合XML语法的内容,Workday返回的HTML通常存在未闭合标签、未转义特殊字符(如&、<)等问题,直接解析会抛出异常
  • <br>替换逻辑错误:你直接把<br>替换为空字符串,会导致原有段落换行丢失,最终文本挤成一团不符合格式要求
  • 冗余无效代码:遍历数据时data[i][0];、data[i][1];两行无任何实际作用
  • 文本提取逻辑冗余:你先格式化XML再用正则删标签的流程多此一举,直接提取XML节点的文本内容即可,无需额外正则处理

修正后的代码

首先替换你的toStringFromHtml函数,同时优化主逻辑的冗余部分:

function pullDataFromWorkday() {
  var url = 'https://services1.myworkday.com/ccx/service/customreport2/[company name]/[owner\'s email]/[Report Name]?format=csv'; 
  var b64 = 'asdfghjklkjhgfdfghj=='; 
  var response = UrlFetchApp.fetch(url, {
      headers: {
        Authorization: 'Basic '+ b64
      }
  });

  if (response.getResponseCode() >= 200 && response.getResponseCode() < 300) {
    var blob = response.getBlob();
    var string = blob.getDataAsString();
    var data = Utilities.parseCsv(string, ",");

    // 遍历处理HTML列,跳过表头行
    for(let i=1;i<data.length;i++) {
      data[i][2] = toStringFromHtml(data[i][2]);
      data[i][3] = toStringFromHtml(data[i][3]);
      data[i][4] = toStringFromHtml(data[i][4]);
      data[i][5] = toStringFromHtml(data[i][5]);
    }

    var ss = SpreadsheetApp.getActive();
    var sheet = ss.getSheetByName('Sheet1');
    sheet.clear();
    sheet.getRange(1,1,data.length,data[0].length).setValues(data);
  } else {
    return;
  }
}

function toStringFromHtml(html) {
  if(!html) return "";
  // 预处理HTML:替换br为换行符,转义特殊字符,补全不规范标签
  html = html.replace(/<br\s*\/?>/gi, '\n')
             .replace(/&(?!amp;|lt;|gt;|quot;|apos;)/g, '&amp;');
  try {
    // 包裹为根节点保证XML结构合法
    const root = XmlService.parse(`<div>${html}</div>`).getRootElement();
    // 递归提取所有节点的文本内容
    const getText = (element) => {
      let text = element.getText();
      element.getChildren().forEach(child => {
        text += getText(child);
      });
      return text;
    };
    return getText(root).trim();
  } catch(e) {
    // 解析失败时降级用正则直接提取文本,兼容极端不规范HTML
    return html.replace(/<[^>]+>/g, '').trim();
  }
}

额外注意点

  • 如果你返回的HTML包含<p>标签,上述代码会自动保留段落内的内容,同时保留换行格式,和你需要的样例效果一致
  • 解析失败的降级逻辑可以保证即使HTML语法完全不规范,也能提取出纯文本内容,不会导致整个脚本中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:03