VBA getcrossreferenceitems(WDRefTypeNumberItem)段落截断?

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

我正在使用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 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))