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

Python复制Word编号格式至Excel遇阻,寻求技术帮助

解决Word编号格式复制到Excel的问题

你的代码只提取了Word段落的纯文本,自动生成的编号(比如1.、1.1这类)会丢失,因为paragraph.text不包含Word的自动编号元素,只保留用户输入的文本。下面是修改后的代码,能保留编号格式:

修改后的完整代码

import os
from docx import Document
import openpyxl
from openpyxl.styles import Alignment

def read_word_doc(file_path):
    doc = Document(file_path)
    content_lines = []
    for paragraph in doc.paragraphs:
        # 获取段落的自动编号文本
        number_text = ""
        try:
            # 调用python-docx内部方法获取渲染后的编号
            number_text = paragraph._get_number()
        except:
            pass
        
        # 拼接编号与文本,去除多余空格
        if number_text:
            line = f"{number_text} {paragraph.text}".strip()
        else:
            line = paragraph.text.strip()
        
        if line:  # 跳过空行
            content_lines.append(line)
    return "\n".join(content_lines)

def copy_to_excel(ws, content, row):
    for line in content.split("\n"):
        cell = ws.cell(row=row, column=1, value=line)
        # 根据编号级别设置Excel单元格缩进,还原层级感
        if line and line.split()[0].replace(".", "").isdigit():
            # 判断编号层级(比如1.1是二级,1.1.1是三级)
            level = len(line.split()[0].split("."))
            cell.alignment = Alignment(indent=level * 1.5)  # 缩进量可调整
        row += 1
    return row

def create_excel_file(folder_path, excel_file_name):
    wb = openpyxl.Workbook()
    ws = wb.active
    # 用传入的folder_path代替硬编码路径
    files = os.listdir(folder_path)
    row = 1
    for file_name in files:
        if file_name.lower().endswith(".docx"):  # 兼容小写后缀
            file_path = os.path.join(folder_path, file_name)
            content = read_word_doc(file_path)
            row = copy_to_excel(ws, content, row)
    # 保存文件,使用传入的文件名
    save_path = os.path.join(folder_path, excel_file_name)
    wb.save(save_path)

# 调用示例(替换为你的实际路径)
create_excel_file(r"C:\folder", "output.xlsx")

关键说明

  1. 编号提取:通过paragraph._get_number()直接获取Word渲染后的编号文本(比如1.、1.1),避免手动解析编号规则的复杂逻辑。
  2. 层级缩进:在Excel中通过设置单元格缩进量,还原Word中多级编号的层级结构,让格式更匹配。
  3. 代码修复:修正了原代码中硬编码路径、保存路径未定义、后缀大小写不兼容的问题。

如果需要更精细的格式匹配(比如编号的字体、颜色),可以进一步扩展copy_to_excel函数,设置单元格的字体样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:52:52