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

使用Word JavaScript API获取文本时如何保留列表符号与识别表格?

嘿,我之前在做Word插件开发的时候刚好碰到过一模一样的问题,给你分享下我踩坑后找到的解决方案:

一、获取列表的项目符号/编号到纯文本

你说得没错,直接调用body.getText()确实只会返回纯文本内容,完全丢失列表的符号或编号。要解决这个问题,你需要遍历文档中的每一段落,判断该段落是否属于列表项,再针对性地提取对应的符号或编号。

这里有个实用的代码示例:

await Word.run(async (context) => {
  // 加载所有段落的文本、列表项关联信息
  const paragraphs = context.document.body.paragraphs;
  paragraphs.load(['text', 'listItem']);
  await context.sync();

  let fullContent = '';
  for (const para of paragraphs.items) {
    if (para.listItem) {
      // 加载列表项的编号/符号信息
      const listItem = para.listItem;
      listItem.load(['number']);
      await context.sync();
      // 把符号/编号和段落文本拼接起来
      fullContent += `${listItem.number} ${para.text}\n`;
    } else {
      // 非列表段落直接追加文本
      fullContent += `${para.text}\n`;
    }
  }
  console.log(fullContent);
});

这段代码的逻辑很清晰:遍历所有段落,检查当前段落是否关联了listItem对象(也就是是否是列表项)。如果是,就获取它的number属性——这个属性对于无序列表会返回对应的项目符号(比如•、○),对于有序列表则会返回完整的编号(比如1.、2.1)。最后把符号/编号和段落文本拼接在一起,就能得到带列表标记的纯文本了。

如果你的文档有多级嵌套列表,还可以额外加载levelNumber属性来处理缩进,让输出的文本结构更贴近原文档。

二、识别表格并获取格式信息

直接用getText()提取内容时,表格的单元格内容会被直接拼接成连续文本,完全无法识别结构。要解决这个问题,你需要单独遍历文档中的表格对象,而不是从正文文本里捞内容。

下面的代码可以帮你提取表格内容,同时获取关键的格式信息:

await Word.run(async (context) => {
  // 加载所有表格的基础信息
  const tables = context.document.body.tables;
  tables.load(['style', 'borderType', 'rows']);
  await context.sync();

  for (const table of tables.items) {
    console.log(`发现表格,样式:${table.style}, 边框类型:${table.borderType}`);
    
    // 加载表格的所有行和单元格
    const rows = table.rows;
    rows.load(['cells']);
    await context.sync();

    let tableText = '[表格开始]\n';
    for (const row of rows.items) {
      const cells = row.cells;
      cells.load(['text', 'shadingColor']);
      await context.sync();
      
      // 提取单元格文本,用制表符分隔(方便后续识别列)
      const cellContents = cells.map(cell => {
        // 这里可以获取单元格的背景色等格式信息
        console.log(`单元格背景色:${cell.shadingColor}`);
        return cell.text;
      });
      tableText += cellContents.join('\t') + '\n';
    }
    tableText += '[表格结束]\n';
    console.log(tableText);
  }
});

这段代码会:

  1. 先找出文档中所有的表格对象,获取表格的整体样式、边框类型等格式信息;
  2. 遍历表格的每一行和每一个单元格,提取单元格文本的同时,还能获取单元格的背景色、字体格式(如果需要的话可以加载font属性)等细节;
  3. 用制表符分隔单元格内容,再加上自定义的[表格开始]/[表格结束]标记,这样就能在纯文本中清晰识别出表格结构了。

需要注意的是,所有要获取的属性都必须先通过load()方法加载,否则会因为权限问题无法读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:27:24