ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1585|回复: 7

[求助] 大家好,word文档中选择题,想把四行变成一行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-25 14:53 | 显示全部楼层 |阅读模式
本帖最后由 aiyushx 于 2019-11-25 16:37 编辑

我想把一个word文档里的选择题,因为他是ABCD四个选择,现在是分四行,我想换成一行,

已读,并且把答案放在题目的后面。



这是原排版:

1.jpg


      要达成的效果:             2.jpg


        谁能帮助我一下,谢谢大家了。这是原版word文档
      
   
理论考核题库 11 文本.zip (141.14 KB, 下载次数: 49)










TA的精华主题

TA的得分主题

发表于 2019-11-30 15:25 | 显示全部楼层
提出几页调试,一切正常。
原文件试运行了一下,效率太低,189页文件用时13分钟
继续改进用正则,还在学习中
  1. Sub 选择题归一()
  2. Dim i%, t$, ti
  3. With ActiveDocument
  4.     .Content = StrConv(.Content, vbNarrow)
  5.         For i = .Paragraphs.Count To 1 Step -1
  6.             With .Paragraphs(i)
  7.                 If Len(.Range) < 4 Or .Range Like "—*" Then
  8.                     .Range.Delete
  9.                 ElseIf .Range Like "[ABCD]*" Then
  10.                     .Range.Characters(1).InsertAfter ". "
  11.                     .Range = Replace(.Range, Chr(13), vbTab)
  12.                 ElseIf .Range Like "答案*" Then
  13.                     t = Replace(.Range, Chr(13), "")
  14.                     .Range = vbCr
  15.                 ElseIf .Range Like "[0-9]*" And t <> "" Then
  16.                     .Range = Replace(.Range, Chr(13), t & Chr(13))
  17.                     t = ""
  18.                 End If
  19.             End With
  20.         Next
  21. End With
  22. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2019-11-30 19:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
勾选通配符:
1.查找—[ 1234567890]@—,替换为空;
2.查找^13([ 1234567890]@)替换为^p★ZL★
3.查找^13,替换为空;
4.查找)(A*)(答案:[ABCDE])替换为)\2^p\1
5.查找[★ZL★]{1,},替换为^p
6.查找(答案:[ABCDE])([ABCDE]),替换为\1^p\2

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-30 20:05 | 显示全部楼层
先查找替换一次干掉空行,再循环判断段落,速度会好些

TA的精华主题

TA的得分主题

发表于 2019-11-30 22:15 | 显示全部楼层
经过三次查找替换
1、^t
  '两空格
2、([0-9A-E]{1,}?*)^13
\1  '加两空格
3、([0-9]{1,}*))  (*)  (答案:[A-E])(^13)
\1^t\3^p\2\4
你的文档有的括号后面有答案了,不知为什么要这样写?这里仅操作括号后没答案的。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-7 14:37 | 显示全部楼层
经过几天的研究,做出了改进,以全正则表达式的方式排版
经测试全文档用时8.8秒
  1. Sub 全正则整理文档()
  2.     Dim rng As Range
  3.         ActiveDocument.Content = StrConv(ActiveDocument.Content, vbNarrow)
  4.         Set rng = ActiveDocument.Content
  5.     With CreateObject("vbscript.regexp")
  6.         .Global = True
  7.         .MultiLine = True
  8.         .Pattern = "(^—.{4,6}\r)|(^\s*\r)"                                 '删除空段
  9.         rng = .Replace(rng, "")
  10.         .Pattern = "\([\s\t]\)"                                                      '替换括号
  11.         rng = .Replace(rng, "(   )")
  12.         .Pattern = "(^\d.{1,90}?)\((\s{3})\).??答案:(.{1,5})$"     '已填好的答案入括号
  13.         rng = .Replace(rng, "$1( $3 )")
  14.         .Pattern = "(^\d.{1,90}?)\((\s{3})\)(.*?)答案:(.{1,5})$"  '未填的答案入括号
  15.         rng = .Replace(rng, "$1( $4 )$3")
  16.         .Pattern = "(^\d.*?)(\r)"                                                 '题干前加空行
  17.         rng = .Replace(rng, "$2$1$2")
  18.         .Pattern = "(^[ABCDE].*?)(\r)"                                      '选项合一
  19.         rng = .Replace(rng, "$1  ")
  20.         .Pattern = "(^—.{4,6}\r)|(^\s*\r)"                                 '删除空段
  21.         rng = .Replace(rng, "")
  22.     End With
  23. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2019-12-8 09:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
经过改进,1.9秒就可以完成

  1. Sub 全正则整理文档()
  2.     Dim rng, t
  3.     t = Timer
  4.         ActiveDocument.Content = StrConv(ActiveDocument.Content, vbNarrow)
  5.         rng = ActiveDocument.Content
  6.     With CreateObject("vbscript.regexp")
  7.         .Global = True
  8.         .MultiLine = True
  9.         .Pattern = "(^—.{4,6}\r)|(^\s*\r)"                                 '删除空段
  10.         rng = .Replace(rng, "")
  11.         .Pattern = "\([\s\t]\)"                                                      '替换括号
  12.         rng = .Replace(rng, "(   )")
  13.         .Pattern = "(^\d.{1,90}?)\((\s{3})\).??答案:(.{1,5})$"     '已填好的答案入括号
  14.         rng = .Replace(rng, "$1( $3 )")
  15.         .Pattern = "(^\d.{1,90}?)\((\s{3})\)(.*?)答案:(.{1,5})$"  '未填的答案入括号
  16.         rng = .Replace(rng, "$1( $4 )$3")
  17.         .Pattern = "(^\d.*?)(\r)"                                                 '题干前加空行
  18.         rng = .Replace(rng, "$2$1$2")
  19.         .Pattern = "(^[ABCDE].*?)(\r)"                                      '选项合一
  20.         rng = .Replace(rng, "$1  ")
  21.         .Pattern = "(^—.{4,6}\r)|(^\s*\r)"                                 '删除空段
  22.         rng = .Replace(rng, "")
  23.     End With
  24.     ActiveDocument.Content = rng
  25.     MsgBox Timer - t
  26. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-17 16:51 | 显示全部楼层
kingtau 发表于 2019-12-8 09:40
经过改进,1.9秒就可以完成

请问这些代码怎么用啊?

菜鸟问一句
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 14:25 , Processed in 0.034938 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表