处理飞书在线文档导出Word后无法自动编号问题

news/2024/9/28 11:11:59 标签: 飞书, word, python

处理飞书在线文档导出Word后无法自动编号问题

  • 解题思路:
  • 处理效果
  • 处理代码
  • 测试数据

最近工作中经常编写一些文档,有些文档需要多人协作完成。这两天需要完成一个可研的初稿,同事使用了飞书的在线文档。第一次使用飞书进行文档协作,体验还不错,没有了金山Office在线文档的保存会导致其它同事页面自动刷新并定位到文档开头的功能,但在完成一个170多页的Word文档并导出后,发现里面的标题的编号全部是单个字符,不能在自动编号了。这个问题导致后续在Word中进行内容调整时,所有的后续编号需要手动全部更改一遍。由于文档是给客户的,也不可能一直使用飞书的在线文档(飞书的在线文档,编辑功能较弱,更适合多人一起码定,相比在线文档的格式处理,金山的功能更强大)。

飞书的文档标题,使用了类似的1.2.3.4.5的多级编码,导出后不再对应Word的标题一,标题二,标题三…,但仍然保留了类似1.2.3.4.5这样的文字,需要尝试使用这个类似1.2.3.4.5的信息进行文档修复。

解题思路:

  1. 读取文档的每个自然段,使用正则表达式分析是否存在编号信息。如果存在,则认为是标题信息,如果不存在,则认为是正文信息。
  2. 提取标题自然段的编号,使用.进行分隔,判断是几级标题。根据标题的层级,设置该自然段的样式(标题一,标题二,标题三…)。
  3. 对于正文,设置文档的左缩进,右缩进,首行缩进,文字开头的定格等。
  4. 保存文档。

处理效果

经处理后,文档的标题一到标题五,可以自动设置对应的标题,并保留了正确的多级编号,对于第6级标题,虽然成功设置成了标题六,但对应的多级编号并没有出现,原因未知。

处理代码

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_LINE_SPACING
import re

pattern = "^(\d\.)+\d?"

def get_header_level(s):
    result = re.match(pattern, s)

    level = 0
    content = s

    if result is not None:
        start = result.start()

        end = result.end()
        cols = end - start

        if cols > 0:
            idx = s[start:end]
            nums = idx.split('.')
            level = len(nums)

            if level == 2:
                if nums[1] == '':
                    level = 1

            content = s[end:]


    return level, content



file_name = r'd:\数据血缘分析与管理v0.4.docx'

word = Document(file_name)

style_heading1 = word.styles['Heading 1']    	# 使用标准样式
style_heading1.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_heading2 = word.styles['Heading 2']    	# 使用标准样式
style_heading2.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_heading3 = word.styles['Heading 3']    	# 使用标准样式
style_heading3.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_heading4 = word.styles['Heading 4']    	# 使用标准样式
style_heading4.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_heading5 = word.styles['Heading 5']    	# 使用标准样式
style_heading5.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_heading6 = word.styles['Heading 6']    	# 使用标准样式
style_heading6.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

style_Normal = word.styles['Normal']    		# 使用标准样式
style_Normal.font.name = '微软雅黑'     		# 使用 "微软雅黑" 字体

for para in word.paragraphs:

    style_name = para.style.name
    content = para.text

    level, title = get_header_level(content)

    if level == 1:
        para.style = style_heading1
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.add_run('').name = "微软雅黑"
        para.style.font.size = 279400
    elif level == 2:
        para.style = style_heading2
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.add_run('').name = "微软雅黑"
        para.style.font.size = 203200
    elif level == 3:
        para.style = style_heading3
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.style.font.size = 203200
    elif level == 4:
        para.style = style_heading4
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.style.font.size = 177800
    elif level == 5:
        para.style = style_heading5
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.style.font.size = 177800
    elif level == 6:
        para.style = style_heading6
        para.paragraph_format.left_indent = Pt(0)
        para.paragraph_format.first_line_indent = Pt(0)
        para.add_run('').bold = True
        para.style.font.size = 152400
    else:
        para.paragraph_format.left_indent = Pt(0)
        # para.paragraph_format.first_line_indent = Pt(20)

    if level < 6:
        para.text = title

    if level > 0:
        print("%s:%d" % (content, level))

    if para.style.name == "Normal":
        para.paragraph_format.first_line_indent = Pt(20)
        para.paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
        para.text = content.lstrip()

word.save(r'd:\数据血缘分析与管理v0.6.docx')

测试数据

1. 概述	- 5 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.1 项目背景	- 5 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.2 项目依据	- 5 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3 项目目标	- 6 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.1 建立完善的数据血缘追踪机制:	- 6 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.2 数据质量监控和管理	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.3 资源利用率优化	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.4 资源调度策略制定	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.5 自动化资源管理工具开发	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.6 应用监控和故障排除机制	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.7 安全策略和措施制定:	- 7 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.8 合规性检查和审计机制	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.9 绩效评估和改进计划	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.3.10 持续创新和优化实践	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4 项目范围	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4.1 业务范围	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4.2 建设单位	- 8 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4.3 应用范围	- 9 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4.4 数据范围	- 9 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1.4.5 数据血缘分析和管理内容	- 9 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2. 项目必要性分析	- 10 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.1 现状分析	- 10 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.1.1 数据中心架构现状	- 10 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.1.2 数据中心面临的问题与挑战	- 11 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.1.3 发展趋势分析	- 13 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2 需求分析	- 14 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.1 业务需求	- 14 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.2 数据需求	- 15 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.3 应用需求	- 15 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.4 组件需求	- 16 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.5 高效的数据血缘计算	- 16 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.6 数据集成需求	- 17 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.7 数据安全需求	- 17 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.2.8 数据质量需求	- 17 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3 项目必要性	- 18 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.1 支撑“4321+”工程建设	- 18 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.2 全域数据融合贯通	- 18 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.3 提升数据分析处理能力	- 18 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.4 数据安全与自主可控	- 18 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.5 适应业界技术趋势	- 19 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
2.3.6 支持大数据平台的升级	- 19 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3. 项目方案	- 19 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.1 总体建设思路	- 19 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.2 业务架构	- 19 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.3 技术线路	- 21 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4 功能架构	- 23 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.1 应用模块	- 23 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.2 应用功能	- 24 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.3 技术架构	- 108 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.4 数据架构	- 109 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.5 自主可控要求	- 109 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.4.6 系统部署方式及软硬件资源需求	- 110 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5 安全方案	- 112 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.1 总体安全防护要求	- 112 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.2 安全保护等级	- 113 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.3 物理和环境安全	- 113 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.4 网络和通信安全	- 113 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.5 设备和计算安全	- 115 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.6 应用和数据安全	- 115 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.7 终端安全设计	- 118 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.5.8 安全管理	- 118 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.6 运维管理建议	- 119 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.7 实施方案	- 120 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.7.1 实施内容	- 120 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.8 实施策略及计划	- 127 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.8.1 实施策略	- 128 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.8.2 实施计划	- 129 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
3.8.3 实施任务分解	- 131 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
4. 项目投资估算	- 145 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
4.1 投资依据说明	- 145 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
4.2 总投资	- 149 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
4.3 各单位投资分项表	- 151 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
4.4 资金计划建议	- 154 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
5. 项目效益分析	- 157 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
5.1 管理效益分析	- 157 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
5.2 经济效益分析	- 158 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
5.3 社会效益分析	- 158 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6. 项目风险分析	- 158 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.1 项目风险分析	- 158 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.2 实施保障措施	- 161 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.2.1 成立领导小组,指导和推动建设工作	- 161 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.2.2 建立总部及分子公司各部门与项目的配合联动机制	- 162 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.2.3 加强项目团队建设	- 163 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
6.2.4 严格的质量管理体系支撑	- 164 -
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
     对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换

http://www.niftyadmin.cn/n/5051520.html

相关文章

SpringMVC(进阶版)

一、文件上传&#x1f353; (一)、文件上传三要素&#x1f95d; 表单项 type“file” 表单的提交方式 method“POST” 表单的enctype属性是多部分表单形式 enctype“multipart/form-data" (二)、文件上传原理&#x1f95d; 1.当form表单修改为多部分表单时&#xff0c;…

C++中 system(pause);的用法与意义

在C中&#xff0c;system("pause") 是一个常见的用法&#xff0c;通常用于在命令行窗口中暂停程序的执行&#xff0c;等待用户按下任意键继续。这行代码的主要目的是在程序执行完毕后保持命令行窗口打开&#xff0c;以便用户能够查看程序的输出结果或任何错误消息&am…

linux 查看CPU架构是AMD还是ARM

要查看 Linux 系统的 CPU 架构是 AMD 还是 ARM&#xff0c;可以使用以下命令&#xff1a; 使用 lscpu 命令并查找 Architecture 字段&#xff1a; lscpu | grep Architecture如果输出结果中包含 x86_64 或 i686&#xff0c;则表示系统的 CPU 架构是 AMD&#xff08;或者是 x86…

像专业人士一样部署:掌握代码部署的最佳实践

作为开发人员&#xff0c;您知道部署代码可能是一个耗时且复杂的过程。简化生产部署对于确保您的代码尽快有效地到达用户手中至关重要。但如何实现这一目标呢&#xff1f;在本文中&#xff0c;我们将讨论简化生产部署的一些基本提示和技巧。 从自动化构建过程到优化发布策略&am…

精准同步时钟系统计时器在工业领域的运用

在现代工业生产中&#xff0c;时间的准确掌握对于生产效率和质量的提升至关重要。而LED计时器以其高精度和可靠性&#xff0c;成为了工厂生产流程中不可或缺的一部分&#xff0c;帮助企业实现精细化管理和高效生产。 一、案例展示&#xff1a; 在学校中&#xff0c;LED计时器…

锅具厨具经营小程序商城的作用有哪些

一口好锅往往是厨房里不可缺的物品&#xff0c;尤其对餐饮业、爱做饭的人来说&#xff0c;并不是随便买个锅就行&#xff0c;其对品牌、价格、质量等有着较高要求&#xff0c;因此商家实际经营中&#xff0c;也会面临一些痛点。 线上发展可拓展更多市场和客户&#xff0c;但同…

免杀对抗-内存加载-shellcode转换-UUID+MAC+IPV4

内存加载-UUID地址-ShellCode转换 介绍&#xff1a;通用唯一识别码(UUID),是用于计算机体系中以识别信息数目的一个128位标识符&#xff0c;根据标准方法生成&#xff0c;不依赖中央机构的注册和分配&#xff0c;UUID具有唯一性。 演示语言&#xff1a;c 1.使用以下代码将c语言…

代码随想录算法训练营第四十八天 | 动态规划 part 9 | 打家劫舍i、ii、iii

目录 198.打家劫舍思路代码 213.打家劫舍II思路代码 337.打家劫舍III思路代码 198.打家劫舍 Leetcode 思路 dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]。对于第i个房间偷还是不偷&#xff1f; 如果偷第i房间&…