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

Python Pandas实现Word转Excel遇问题,求代码修正

解决Word多级列表转Excel单列表格的问题

问题描述

我尝试用Python将包含一级编号及二级子列表的Word文档转换为Excel文件,目标是生成1列3行的表格,每行对应一个一级编号下的全部内容(包含其二级子列表)。目前已提取文本但转换逻辑存在问题,恳请修改代码。

输入示例

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

  1. Sed ac nibh bibendum, malesuada odio at, luctus tellus.
    a. Integer vel dolor sit amet arcu luctus hendrerit in ut sapien.
  2. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
    a. Aliquam posuere nulla et ipsum pulvinar malesuada.
    b. Proin rutrum augue quis sollicitudin varius.
    c. Fusce vitae augue hendrerit, tincidunt ex eu, malesuada orci.
  3. Suspendisse non sem in ex hendrerit pellentesque.

预期输出

生成1列3行的Excel表格:

  • 第1行(表头):Acceptance Criteria
  • 第2行:包含一级编号1的内容及对应的二级子列表a的内容
  • 第3行:包含一级编号2的内容及对应的二级子列表a、b、c的内容
  • 第4行:包含一级编号3的内容

当前代码

from docx2python import docx2python
from openpyxl import Workbook

# Extract text from docx file
doc_result = docx2python('input.docx')
text = doc_result.text

# Split text into lines
lines = text.split('\n')

# Create a new workbook and select the active worksheet
wb = Workbook()
ws = wb.active

# Set the title for the first column
ws.cell(row=1, column=1).value = 'Acceptance Criteria'

# Initialize row counter and cell text
row_counter = 2
cell_text = ''

# Iterate over lines and extract text between capital numerical bullets
for line in lines:
    if line.strip():
        if line[0].isdigit():
            if cell_text:
                ws.cell(row=row_counter, column=1).value = cell_text.strip()
                row_counter += 1
                cell_text = ''
            cell_text += line + '\n'
        else:
            cell_text += line + '\n'

if cell_text:
    ws.cell(row=row_counter, column=1).value = cell_text.strip()

# Save the workbook
wb.save('output.xlsx')

修改后的代码

from docx2python import docx2python
from openpyxl import Workbook

# 提取Word文档文本
doc_result = docx2python('input.docx')
text = doc_result.text

# 按行分割文本,过滤空行并去除每行首尾空格
lines = [line.strip() for line in text.split('\n') if line.strip()]

# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
ws.cell(row=1, column=1).value = 'Acceptance Criteria'

row_counter = 2
current_group = []

for line in lines:
    # 判断是否是一级编号行(以数字开头)
    if line[0].isdigit():
        # 如果已有分组内容,先写入表格
        if current_group:
            ws.cell(row=row_counter, column=1).value = '\n'.join(current_group)
            row_counter += 1
            current_group = []
        current_group.append(line)
    else:
        # 二级子列表行直接加入当前分组
        current_group.append(line)

# 处理最后一个未写入的分组
if current_group:
    ws.cell(row=row_counter, column=1).value = '\n'.join(current_group)

# 保存Excel文件
wb.save('output.xlsx')

修改说明

  1. 先对分割后的行做过滤空行+去除首尾空格的预处理,避免无效空白内容干扰分组逻辑
  2. 用列表current_group收集同一一级编号下的所有行,逻辑更清晰易维护
  3. 写入单元格时用'\n'.join(current_group),确保内容按原格式换行显示
  4. 修复了原代码中可能因空行导致的内容拼接混乱问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:34