Python Pandas实现Word转Excel遇问题,求代码修正
解决Word多级列表转Excel单列表格的问题
问题描述
我尝试用Python将包含一级编号及二级子列表的Word文档转换为Excel文件,目标是生成1列3行的表格,每行对应一个一级编号下的全部内容(包含其二级子列表)。目前已提取文本但转换逻辑存在问题,恳请修改代码。
输入示例
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Sed ac nibh bibendum, malesuada odio at, luctus tellus.
a. Integer vel dolor sit amet arcu luctus hendrerit in ut sapien.- 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.- 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')
修改说明
- 先对分割后的行做过滤空行+去除首尾空格的预处理,避免无效空白内容干扰分组逻辑
- 用列表
current_group收集同一一级编号下的所有行,逻辑更清晰易维护 - 写入单元格时用
'\n'.join(current_group),确保内容按原格式换行显示 - 修复了原代码中可能因空行导致的内容拼接混乱问题
内容的提问来源于stack exchange,提问作者Sik Saw
相关产品推荐
相关产品推荐

