VBA getcrossreferenceitems(WDRefTypeNumberItem)段落截断?
我正在使用excel vba从word文档中提取信息。 在word文档中,有编号列表的级别。例如:VBA getcrossreferenceitems(WDRefTypeNumberItem)段落截断?,vba,Vba,我正在使用excel vba从word文档中提取信息。 在word文档中,有编号列表的级别。例如: 1. ABC 1.1 DEF 1.1.1 ABCDEF 2. AAA 2.1 BBB 2.1.1. CCC 我需要获得每个级别中每个标题的完整上下文,并将它们放入excel范围,即{“1.ABC”、“1.1 DEF”、“1.1.1 ABCDEF”、“2.AAA”、“2.1 BBB”、“2.1.1.CCC”} 我使用的功能是: For Each sec In
1. ABC
1.1 DEF
1.1.1 ABCDEF
2. AAA
2.1 BBB
2.1.1. CCC
我需要获得每个级别中每个标题的完整上下文,并将它们放入excel范围,即{“1.ABC”、“1.1 DEF”、“1.1.1 ABCDEF”、“2.AAA”、“2.1 BBB”、“2.1.1.CCC”}
我使用的功能是:
For Each sec In objDoc.getcrossreferenceitems(wdRefTypeNumberedItem)
但是,如果标题太长,我的标题将被截断。例如,我有(出于保密原因添加了随机文本):
“5.2.11.当前参考:作为评估过程的一部分,XXX将进行2340AERTQ3493年。选择ADT34534FDGSR时,请确保它们是AERA34AEFDS。”
但只是
5.2.11。当前参考:作为评估过程的一部分,XXX将进行234
显示,句子的其余部分消失
如果有人有其他解决方案,请告诉我。我确认此行为。一个可行但复杂的解决方案是扫描文档中所有编号的项目,这些项目为您提供了全文,然后对照GetCrossReferenceItems返回的列表交叉引用该结果。有相当多的工作涉及,但工作,让您能够创建一个列表与可引用的标题和数字项,这是我所做的,以建立一个更用户友好的替代Word自己的实现 您必须匹配适用于GetCrossReferenceItems返回的列表的格式化字,即识别和删除特殊字符 注意音轨的变化。GetCrossReferenceItems中存在一个bug,这意味着在文本开头有跟踪更改的项(在我的例子中是标题)不会由GetCrossReferenceItems返回,但在内部仍然在列表中,因此索引是偏移的。如果所讨论的项目是项目11,那么GetCrossReferenceItems将属于项目12的项目指定为项目11。一种解决方法是在GetCrossReferenceItems之前接受所有修订,然后撤消它
这并不容易,但很有效。我在MSWord中遇到了类似的问题。我发现在下面的代码中有一些段落的文本被缩短了
Sub bug()
items = ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem)
For idx = 1 To UBound(items)
MsgBox items(idx)
Next
End Sub
我必须使用一个较长的解决方案(很抱歉,用Python,但很容易用VBA重写):
这确实有效。然而,正如我所说,这是一些乏味的。那么,我是否错过了MSWord中的某些VBA函数,或者
GetCrossReferenceItems
已知错误,并且在VBA中找不到任何替换项?您可以发布完整的函数吗?你是如何标注“秒”的?@RyanL由于保密原因,我无法发布完整内容-但一般来说,我只希望我的程序提取与每个编号项目相关的文本
varHeadings = []
for par in objDoc.Paragraph:
if par.Range.ListFormat.ListType == win32com.client.constants.wdListOutlineNumbering:
idx = par.Range.ListFormat.ListString
txt = par.Range.Text.strip('\n').strip('\r')
varHeadings.append('%s%s' % (idx, par.Range.Text))