当前位置:   article > 正文

【办公类-21-04】20240227单个word按“段落数”拆分多个Word(三级育婴师操作参考题目 有段落文字和表格 1拆13份)

【办公类-21-04】20240227单个word按“段落数”拆分多个Word(三级育婴师操作参考题目 有段落文字和表格 1拆13份)

作品展示

背景需求:

最近学育婴师,老师发了一套doc操作参考

但是老师是一节节授课的,每节都有视频,如果做在一个文档里,会很长很长,容易找不到。所以我需要里面的单独文字的docx。

以前的方法是

1、打开源文件,保留第1题,删除2-13题,再另存题目1,

2、再恢复原始状态,保留第2题,删除第1题、第3-13题,在另存题目2

……

之前试过把多个word合并成1个word,

【办公类-21-01】20240117育婴师操作题word合并1.0-CSDN博客文章浏览阅读912次,点赞15次,收藏10次。【办公类-21-01】20240117育婴师操作题word合并1.0https://blog.csdn.net/reasonsummer/article/details/135651389?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135651389%22%2C%22source%22%3A%22reasonsummer%22%7D

现在想试试能不能把1个word拆分成多个word

解题思路:

一、另存为docx文件

二、去除word里面的空行回车

  1. from docx import Document
  2. from openpyxl import load_workbook
  3. import glob
  4. import re
  5. # 将模板 Excel 读取进程序:
  6. path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
  7. file=path + r'\育婴师三级教育操作参考.docx' # 必须是docx
  8. print(file)
  9. # C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题\育婴师三级教育操作参考2.docx
  10. # 提取四个加粗标题所在的行数 # 参考https://www.shouxicto.com/article/96876.html
  11. doc= Document(file)
  12. # 遍历每个段落并判断是否为空白行,如果有空白行,就删除
  13. for paragraph in doc.paragraphs:
  14. if not paragraph.text.strip():
  15. # 如果是空白行则将其从文档中移除
  16. p = paragraph._element
  17. p.getparent().remove(p)
  18. doc.save(path + r'\育婴师三级教育操作参考(去掉回车).docx')

三、读取word里面“加粗标题”所在的行

  1. print('----2、读取word里面标题加粗段落的行数------')
  2. filename=path + r'\育婴师三级教育操作参考(去掉回车).docx'
  3. # 打开Word文档
  4. doc = Document(filename)
  5. d=len(doc.paragraphs)
  6. print(d)
  7. # docx没有去掉空行前,一共有258段文字
  8. # docx去掉空行后,一共有244段文字
  9. h=[]
  10. s=[]
  11. # 遍历文档中的段落
  12. for i, paragraph in enumerate(doc.paragraphs):
  13. if paragraph.runs:
  14. # 检查段落中的所有运行对象
  15. for run in paragraph.runs:
  16. if run.bold:
  17. # 如果运行对象的文字为加粗,则打印段落索引
  18. # print("段落", i, "的文字被加粗了")
  19. h.append(i)
  20. # 提取每一份的加粗标题
  21. t=doc.paragraphs[i].text
  22. # print(t)
  23. s.append(t)
  24. s=list(set(s))
  25. s.sort()
  26. # print(s)
  27. # ['3.1.1 运用发育诊断法对2岁婴儿的以不同步子行走能力进行测试', '3.1.2 为2岁婴儿编制规范、适宜的个别化游戏活动计划(5分钟)', '3.1.3 设计生活中婴儿动手自理的活动(5分钟)', '3.1.4 六个月以内
  28. # 的婴儿的精细动作的日常练习活动设计(5分钟)', '3.1.5 列举两种感统练习器械,并简述其活动功能(5分钟)', '3.2.1 请阐述对婴儿语言发展水平的观察与记录方法(5分钟)', '3.2.2 如何制定婴幼儿个别化
  29. # 语言培养计划(5分钟)', '3.2.3 设计一份记录表格,观察一个6个月左右的宝宝寻找不同声源的感知练习过程(5分钟)', '3.2.4 设计一个观察表,观察并调整婴儿在视动协调方面的练习(5分钟)', '3.2.5 设
  30. # 计一个观察表,记录孩子可能发生的行为(5分钟)', '3.3.1 如何对待任性的孩子(5分钟)', '3.3.2 如何对待爱哭的孩子(5
  31. # print(len(s))
  32. # 13
  33. h=list(set(h))
  34. h.sort()
  35. j=h[1:]
  36. j.append(d)
  37. print(h)
  38. print(len(h))
  39. print(j)
  40. print(len(j))
  41. # # 去掉空行前
  42. # # [1, 25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238]
  43. # # 13
  44. # # [25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238, 258]
  45. # # 13
  46. # # 去掉空行后
  47. # # [1, 23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224]
  48. # # 13
  49. # # [23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224, 244]

1、提取加粗标题的文字部分,做保存的文件名

2、提取两个黑体加粗标题之间的行数

四、word里面有表格,它也占了段落数,但段落里不显示

直接删除小于23并大于45的段落,生成第2套题目

  1. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
  2. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
  3. # 13张表格里面分别有几个表格
  4. imagePath1=path+r'\育婴师13题拆分'
  5. if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在
  6. os.makedirs(imagePath1) # 若图片文件夹不存在就创建
  7. # for x in range(len(s)):
  8. # 获取第一页的段落和表格
  9. # a=int(j[x]+o[x])
  10. for x in range(len(s)):
  11. doc = Document(filename)
  12. first_page_paragraphs = []
  13. first_page_tables = []
  14. for element in doc.element.body:
  15. if element.tag.endswith(('}p', '}tbl')):
  16. if element.getparent().index(element) >int(j[x]) :
  17. if element.tag.endswith('p'):
  18. first_page_paragraphs.append(element)
  19. else:
  20. first_page_tables.append(element)
  21. if element.getparent().index(element)<int(h[x]):
  22. if element.tag.endswith('p'):
  23. first_page_paragraphs.append(element)
  24. else:
  25. first_page_tables.append(element)
  26. # print(int(j[x]+o[x]))
  27. # print(int(h[x]+o[x]))
  28. # 删除第一页的段落和表格
  29. for paragraph in first_page_paragraphs:
  30. p = paragraph.getparent()
  31. p.remove(paragraph)
  32. for table in first_page_tables:
  33. t = table.getparent()
  34. t.remove(table)
  35. # # 保存修改后的文档为新文件
  36. # doc.save(path+r'01.docx')
  37. doc.save(imagePath1+r'\{} {}.docx'.format('%02d'%x,s[x]))

结果第2份前面多了2行,后面少了2行。

分析后认为,可能导致错行的原因是每份操作题内有“表格”。

第1份题目里面有2个表格,也占了2行,虽然表格被删除了,但是段落占位没有删除,导致第2份题目表格出现正好2行的的错位。

计算每份题中表格的数量 2、1、0、1、1、1、1、1、1、1、1、0、0、0

  1. print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
  2. # 拆分docx(读取加粗的行,这些行还要加上表格的行数)
  3. # 13张表格里面分别有几个表格
  4. bg=[2,1,0,1,1,1,1,1,1,1,0,0,0]
  5. # 第一张表是原来的段落数,所以就是0
  6. bg.insert(0,0)
  7. # print(bg)
  8. # 数字累加
  9. o = []
  10. sum = 0
  11. for num in bg:
  12. sum += num
  13. o.append(sum)
  14. print(o)
  15. # [0, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
  16. # # # 没有空行的内容

        确保第2份开始的段落数+累计的表格数

结果正确

全部代码

  1. # https://blog.csdn.net/lau_jw/article/details/114383781
  2. '''
  3. 目的:育婴师word题目拆分成多个表格(根据标题(加粗)所在行数拆分)
  4. 作者:阿夏
  5. 时间:2024年2月27日
  6. '''
  7. from docx import Document
  8. from openpyxl import load_workbook
  9. import glob
  10. import re,os
  11. print('----1、word数据清洗------')
  12. path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
  13. file=path + r'\育婴师三级教育操作参考.docx' # 必须是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')
  25. print('----2、读取word里面标题加粗段落的行数------')
  26. filename=path + r'\育婴师三级教育操作参考(去掉回车).docx'
  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'\育婴师13题拆分'
  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]+o[x]) :
  106. if element.tag.endswith('p'):
  107. first_page_paragraphs.append(element)
  108. else:
  109. first_page_tables.append(element)
  110. if element.getparent().index(element)<int(h[x]+o[x]):
  111. if element.tag.endswith('p'):
  112. first_page_paragraphs.append(element)
  113. else:
  114. first_page_tables.append(element)
  115. # print(int(j[x]+o[x]))
  116. # print(int(h[x]+o[x]))
  117. # 删除第一页的段落和表格
  118. for paragraph in first_page_paragraphs:
  119. p = paragraph.getparent()
  120. p.remove(paragraph)
  121. for table in first_page_tables:
  122. t = table.getparent()
  123. t.remove(table)
  124. # # 保存修改后的文档为新文件
  125. # doc.save(path+r'01.docx')
  126. doc.save(imagePath1+r'\{} {}.docx'.format('%02d'%x,s[x]))

感悟:

1、删除段落和表格:本篇用删除段落和表格的方式保留需要的段落部分

后续思考:可以试试复制法——复制25-47的内容,清空文档,再黏贴25-47的内容,另存为。

2、段落内包含表格占位,有点难办

段落里有表格占位,这个很麻烦,如果有很多份操作题需要拆开,我不可能去看每套题目里面有几张表格,并做段落数累加。后续还要再研究段落数与表格在第几段上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/159223
推荐阅读
相关标签
  

闽ICP备14008679号