经测试,Application.Visible = False的情况下,selecion.movedown 的速度是Application.Visible = true的两倍 用for i = 1 to paragraphsCount的方式遍历段落,速度和Application.Visible = False的情况下的selection.movedown 一样。 用foreach 遍历段落,速度是用for i = 1 to paragraphsCount 方式的6倍。等有时间我在我的文档上测试效果。
文档段落多是因为里面有大量表格,表格的一个单元格至少包含一个段落。
>用foreach 遍历段落,速度是用for i = 1 to paragraphsCount 方式的6倍 人家不是数组,有可能是链表。能用foreach 就用foreach 。
确实,WORD打开稍大一点的文档,时间就要10秒以上,哪怕只有几百页。 你2000多页的文档就有16万多个段落太夸张了吧,一页有80段。是多个文档合计的段落数吧。 不管怎么样,考虑到效率问题,你应该改用for each这样的方式来遍历链表结构。我不敢说完全看懂了你关于具体读嵌套结构需求的解释,但还是感觉,没理由不采用for each遍历Document.Paragraphs的方式来实现,所以建议先试下这样做。 另外,你竟然使用selection来频繁改变当前光标位置,速度慢更是毫无疑问了。
Application.Visible = False
用word提供的“查找”-“定位”,定位目标为“标题”,可以迅速在文档中定位到任意标题(1,2,3.。级) 宏为: Selection.GoTo What:=wdGoToHeading, Which:=wdGoToNext, Count:=1, Name:="" 一般标题不会太长吧?我这么理解,标题就一行吧。 Selection.GoTo What:=wdGoToHeading, Which:=wdGoToNext, Count:=1, Name:="" Selection.EndKey Unit:=wdLine, Extend:=wdExtend Debug.Print Selection.Style, Selection.Text 上面的代码从当前位置找到一个标题,选择整个行,并打印这个行的标题级别和标题内容。。。 如果你一开始就定位到文档的开始处,经过多次执行,就可以得到整个大纲了。 不知道是否满足你的要求? 下来就是把宏转为vb代码
Selection.GoTo What:=wdGoToHeading, Which:=wdGoToNext, Count:=1, Name:="" Selection.EndKey Unit:=wdLine, Extend:=wdExtend Debug.Print Selection.Style, Selection.Text
2,462
社区成员
10,807
社区内容
加载中
试试用AI创作助手写篇文章吧