• 【办公类-21-05】20240227单个word按“段落数”拆分多个Word(成果汇编 只有段落文字 1拆5)


    作品展示

    背景需求

    前文对一套带有段落文字和表格的word进行13份拆分

    【办公类-21-04】20240227单个word按“段落数”拆分多个Word(三级育婴师操作参考题目1拆13份)-CSDN博客文章浏览阅读293次,点赞8次,收藏3次。【办公类-21-04】20240227单个word按“段落数”拆分多个Word(三级育婴师操作参考题目1拆13份)https://blog.csdn.net/reasonsummer/article/details/136331041现在我随便找一份docx文件(全部都是段落文字,没有表格),

    试试没表格干扰,是否直接读取段落就可以将加粗部分的文字另存多份

    素材准备:

    有几个加粗标题(不能是一级标题这种,一定清除格式,加粗)

    错误的

    1. # https://blog.csdn.net/lau_jw/article/details/114383781
    2. '''成果汇编word题目拆分成多个表格(根据标题(加粗)所在行数拆分-没有表格,只有段落文字)
    3. 作者:阿夏
    4. 时间:2024年2月27日
    5. '''
    6. from docx import Document
    7. from openpyxl import load_workbook
    8. import glob
    9. import re,os
    10. print('----1、word数据清洗------')
    11. a='成果汇编'
    12. path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
    13. file=path + r'\{}.docx'.format(a) # 必须是docx
    14. print(file)
    15. # C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题\电子屏安全管理制度(样本)2.docx
    16. # 提取四个加粗标题所在的行数 # 参考https://www.shouxicto.com/article/96876.html
    17. doc= Document(file)
    18. # 遍历每个段落并判断是否为空白行,如果有空白行,就删除
    19. for paragraph in doc.paragraphs:
    20. if not paragraph.text.strip():
    21. # 如果是空白行则将其从文档中移除
    22. p = paragraph._element
    23. p.getparent().remove(p)
    24. doc.save(path + r'\{}(去掉回车).docx'.format(a))
    25. print('----2、读取word里面标题加粗段落的行数------')
    26. filename=path + r'\{}(去掉回车).docx'.format(a)
    27. # 打开Word文档
    28. doc = Document(filename)
    29. d=len(doc.paragraphs)
    30. print(d)
    31. # docx没有去掉空行前,一共有258段文字
    32. # docx去掉空行后,一共有244段文字
    33. h=[]
    34. s=[]
    35. # 遍历文档中的段落
    36. for i, paragraph in enumerate(doc.paragraphs):
    37. if paragraph.runs:
    38. # 检查段落中的所有运行对象
    39. for run in paragraph.runs:
    40. if run.bold:
    41. # 如果运行对象的文字为加粗,则打印段落索引
    42. # print("段落", i, "的文字被加粗了")
    43. h.append(i)
    44. # 提取每一份的加粗标题
    45. t=doc.paragraphs[i].text
    46. # print(t)
    47. s.append(t)
    48. s=list(set(s))
    49. s.sort()
    50. # print(s)
    51. # ['3.1.1 运用发育诊断法对2岁婴儿的以不同步子行走能力进行测试', '3.1.2 为2岁婴儿编制规范、适宜的个别化游戏活动计划(5分钟)', '3.1.3 设计生活中婴儿动手自理的活动(5分钟)', '3.1.4 六个月以内
    52. # 的婴儿的精细动作的日常练习活动设计(5分钟)', '3.1.5 列举两种感统练习器械,并简述其活动功能(5分钟)', '3.2.1 请阐述对婴儿语言发展水平的观察与记录方法(5分钟)', '3.2.2 如何制定婴幼儿个别化
    53. # 语言培养计划(5分钟)', '3.2.3 设计一份记录表格,观察一个6个月左右的宝宝寻找不同声源的感知练习过程(5分钟)', '3.2.4 设计一个观察表,观察并调整婴儿在视动协调方面的练习(5分钟)', '3.2.5 设
    54. # 计一个观察表,记录孩子可能发生的行为(5分钟)', '3.3.1 如何对待任性的孩子(5分钟)', '3.3.2 如何对待爱哭的孩子(5
    55. # print(len(s))
    56. # 13
    57. h=list(set(h))
    58. h.sort()
    59. j=h[1:]
    60. j.append(d)
    61. print(h)
    62. print(len(h))
    63. print(j)
    64. print(len(j))
    65. # # 去掉空行前
    66. # # [1, 25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238]
    67. # # 13
    68. # # [25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238, 258]
    69. # # 13
    70. # # 去掉空行后
    71. # # [1, 23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224]
    72. # # 13
    73. # # [23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224, 244]
    74. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
    75. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
    76. # 13张表格里面分别有几个表格
    77. # bg=[2,1,0,1,1,1,1,1,1,1,0,0,0]
    78. # # 第一张表是原来的段落数,所以就是0
    79. # bg.insert(0,0)
    80. # # print(bg)
    81. # # 数字累加
    82. # o = []
    83. # sum = 0
    84. # for num in bg:
    85. # sum += num
    86. # o.append(sum)
    87. # print(o)
    88. # # [0, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
    89. # # # # 没有空行的内容
    90. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
    91. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
    92. # 13张表格里面分别有几个表格
    93. imagePath1=path+r'\{}拆分'.format(a)
    94. if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在
    95. os.makedirs(imagePath1) # 若图片文件夹不存在就创建
    96. # for x in range(len(s)):
    97. # 获取第一页的段落和表格
    98. # a=int(j[x]+o[x])
    99. for x in range(len(s)):
    100. doc = Document(filename)
    101. first_page_paragraphs = []
    102. first_page_tables = []
    103. for element in doc.element.body:
    104. if element.tag.endswith(('}p', '}tbl')):
    105. if element.getparent().index(element) >int(j[x]) :
    106. # if element.getparent().index(element) >int(j[x]+o[x]) :
    107. if element.tag.endswith('p'):
    108. first_page_paragraphs.append(element)
    109. else:
    110. first_page_tables.append(element)
    111. if element.getparent().index(element)<int(h[x]):
    112. # if element.getparent().index(element)
    113. if element.tag.endswith('p'):
    114. first_page_paragraphs.append(element)
    115. else:
    116. first_page_tables.append(element)
    117. # print(int(j[x]+o[x]))
    118. # print(int(h[x]+o[x]))
    119. # 删除第一页的段落和表格
    120. for paragraph in first_page_paragraphs:
    121. p = paragraph.getparent()
    122. p.remove(paragraph)
    123. for table in first_page_tables:
    124. t = table.getparent()
    125. t.remove(table)
    126. # # 保存修改后的文档为新文件
    127. # doc.save(path+r'01.docx')
    128. doc.save(imagePath1+r'\{} {}.docx'.format('%02d'%x,s[x]))

    结果显示及调整

    1、结果显示题目与数字顺序不符合

    1、解决思路

    2、内容多一行

    2、解决思路

    正确代码全部

    1. # https://blog.csdn.net/lau_jw/article/details/114383781
    2. '''成果汇编word题目拆分成多个表格(根据标题(加粗)所在行数拆分-没有表格,只有段落文字)
    3. 作者:阿夏
    4. 时间:2024年2月27日
    5. '''
    6. from docx import Document
    7. from openpyxl import load_workbook
    8. import glob
    9. import re,os
    10. print('----1、word数据清洗------')
    11. a='成果汇编'
    12. path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
    13. file=path + r'\{}.docx'.format(a) # 必须是docx
    14. print(file)
    15. # C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题\电子屏安全管理制度(样本)2.docx
    16. # 提取四个加粗标题所在的行数 # 参考https://www.shouxicto.com/article/96876.html
    17. doc= Document(file)
    18. # 遍历每个段落并判断是否为空白行,如果有空白行,就删除
    19. for paragraph in doc.paragraphs:
    20. if not paragraph.text.strip():
    21. # 如果是空白行则将其从文档中移除
    22. p = paragraph._element
    23. p.getparent().remove(p)
    24. doc.save(path + r'\{}(去掉回车).docx'.format(a))
    25. print('----2、读取word里面标题加粗段落的行数------')
    26. filename=path + r'\{}(去掉回车).docx'.format(a)
    27. # 打开Word文档
    28. doc = Document(filename)
    29. d=len(doc.paragraphs)
    30. print(d)
    31. # docx没有去掉空行前,一共有258段文字
    32. # docx去掉空行后,一共有244段文字
    33. h=[]
    34. s=[]
    35. n=1
    36. # 遍历文档中的段落
    37. for i, paragraph in enumerate(doc.paragraphs):
    38. if paragraph.runs:
    39. # 检查段落中的所有运行对象
    40. for run in paragraph.runs:
    41. if run.bold:
    42. # 如果运行对象的文字为加粗,则打印段落索引
    43. # print("段落", i, "的文字被加粗了")
    44. h.append(i)
    45. # 提取每一份的加粗标题
    46. t=doc.paragraphs[i].text
    47. print(t)
    48. b=str('%02d'%n)+t
    49. s.append(b)
    50. # 没有按照顺序排列
    51. # ['一、案例汇编对象', '三、案例提炼流程', '二、案例提炼要求', '四、相关事宜', '活动背景']
    52. # 所以加了一个数字序号
    53. # ['01活动背景', '02一、案例汇编对象', '03二、案例提炼要求', '04三、案例提炼流程', '05四、相关事宜']
    54. n+=1
    55. s=list(set(s))
    56. s.sort()
    57. print(s)
    58. # ['3.1.1 运用发育诊断法对2岁婴儿的以不同步子行走能力进行测试', '3.1.2 为2岁婴儿编制规范、适宜的个别化游戏活动计划(5分钟)', '3.1.3 设计生活中婴儿动手自理的活动(5分钟)', '3.1.4 六个月以内
    59. # 的婴儿的精细动作的日常练习活动设计(5分钟)', '3.1.5 列举两种感统练习器械,并简述其活动功能(5分钟)', '3.2.1 请阐述对婴儿语言发展水平的观察与记录方法(5分钟)', '3.2.2 如何制定婴幼儿个别化
    60. # 语言培养计划(5分钟)', '3.2.3 设计一份记录表格,观察一个6个月左右的宝宝寻找不同声源的感知练习过程(5分钟)', '3.2.4 设计一个观察表,观察并调整婴儿在视动协调方面的练习(5分钟)', '3.2.5 设
    61. # 计一个观察表,记录孩子可能发生的行为(5分钟)', '3.3.1 如何对待任性的孩子(5分钟)', '3.3.2 如何对待爱哭的孩子(5
    62. # print(len(s))
    63. # 13
    64. h=list(set(h))
    65. h.sort()
    66. j=h[1:]
    67. j.append(d)
    68. print(h)
    69. print(len(h))
    70. print(j)
    71. print(len(j))
    72. # # 去掉空行前
    73. # # [1, 25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238]
    74. # # 13
    75. # # [25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238, 258]
    76. # # 13
    77. # # 去掉空行后
    78. # # [1, 23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224]
    79. # # 13
    80. # # [23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224, 244]
    81. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
    82. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
    83. # 13张表格里面分别有几个表格
    84. # bg=[2,1,0,1,1,1,1,1,1,1,0,0,0]
    85. # # 第一张表是原来的段落数,所以就是0
    86. # bg.insert(0,0)
    87. # # print(bg)
    88. # # 数字累加
    89. # o = []
    90. # sum = 0
    91. # for num in bg:
    92. # sum += num
    93. # o.append(sum)
    94. # print(o)
    95. # # [0, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
    96. # # # # 没有空行的内容
    97. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
    98. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
    99. # 13张表格里面分别有几个表格
    100. imagePath1=path+r'\{}拆分'.format(a)
    101. if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在
    102. os.makedirs(imagePath1) # 若图片文件夹不存在就创建
    103. # for x in range(len(s)):
    104. # 获取第一页的段落和表格
    105. # a=int(j[x]+o[x])
    106. for x in range(len(s)):
    107. doc = Document(filename)
    108. first_page_paragraphs = []
    109. first_page_tables = []
    110. for element in doc.element.body:
    111. if element.tag.endswith(('}p', '}tbl')):
    112. if element.getparent().index(element) >=int(j[x]) :
    113. # if element.getparent().index(element) >int(j[x]+o[x]) :
    114. if element.tag.endswith('p'):
    115. first_page_paragraphs.append(element)
    116. else:
    117. first_page_tables.append(element)
    118. if element.getparent().index(element)<int(h[x]):
    119. # if element.getparent().index(element)
    120. if element.tag.endswith('p'):
    121. first_page_paragraphs.append(element)
    122. else:
    123. first_page_tables.append(element)
    124. # print(int(j[x]+o[x]))
    125. # print(int(h[x]+o[x]))
    126. # 删除第一页的段落和表格
    127. for paragraph in first_page_paragraphs:
    128. p = paragraph.getparent()
    129. p.remove(paragraph)
    130. for table in first_page_tables:
    131. t = table.getparent()
    132. t.remove(table)
    133. # # 保存修改后的文档为新文件
    134. # doc.save(path+r'01.docx')
    135. doc.save(imagePath1+r'\{}.docx'.format(s[x]))

  • 相关阅读:
    Linux C语言开发-D6变量
    JavaScript 继承 - ES6的class继承用ES5如何实现?
    拒绝内卷:利用4P营销理论打造汇报PPT
    【面试八股】IP协议八股
    asp.net core、c#关于路径的总结
    POSTGRESQL 一个“大” SQL 的优化历险记
    mysql8其它新特性
    springBoot中集成Swagger
    Kafka服务端高性能技术细节原理:基于零拷贝的mmap和sendfile
    面向对象编程(高级部分)——代码块
  • 原文地址:https://blog.csdn.net/reasonsummer/article/details/136332801