gpt4 book ai didi

perl - 获取 Word 文档特定部分中的段落

转载 作者:行者123 更新时间:2023-12-05 00:34:35 24 4
gpt4 key购买 nike

我在 Word 中查找特定部分时遇到问题。建议我尝试在 Word 中查看 VB 对象浏览器以寻求帮助。我知道至少有 5 个标题“集”(即,如果您查看文档结构图,我看到编号为 1、2、3、4、5...)。我不知道如何导航到第五个标题,最初我认为它是部分,但当我查看部分时我意识到几乎所有内容都在一个部分中,但万一有人正在寻找有关如何做部分的信息, 下面似乎可行,因为我已经经历了编写它的麻烦。

my($document) = $Word->Documents->Open($input) || die("Unable to open document ", Win32::OLE->LastError());
my $section = $document->{Sections}->Item(1); # put section number you're looking for in here
$section_five_paragraphs = $section->{Range}->Paragraphs();
$enumerate = new Win32::OLE::Enum($section_five_paragraphs);
while (defined($paragraph = $enumerate->Next()))
{
print $paragraph->{Range}->{Text} . "\n";
}

那么有没有人知道如何到达第 5 个标题区域,或者可以指点我一些可能有帮助的东西?

最佳答案

请问我是不是没听清您的意思,您正试图在某个部分中找到第 5 个标题 1?如果是这种情况,虽然 Word 明确定义了部分(您记为 $document->{Sections}->Item(1)),但它没有明确定义特定标题或一般样式。为此,您必须浏览所有样式以寻找感兴趣的样式。下面的 VBA 代码(我很抱歉没有写 perl)就是这样做的,并且只在特定的部分中查看。

Sub FindHeading1()
On Error GoTo MyErrorHandler

Dim currentDocument As Document
Set currentDocument = ActiveDocument

Dim findRange As Range
Set findRange = currentDocument.Sections(2).Range 'which section you want

Dim endRange As Long
endRange = findRange.end

findRange.Find.ClearFormatting
findRange.Find.Style = ActiveDocument.Styles("Heading 1")

Dim headingCountFound As Long
Do While findRange.Find.Execute(FindText:="")
If findRange.End > endRange Then Exit Sub
findRange.Select
headingCountFound = headingCountFound + 1
If headingCountFound = 3 Then 'which occurance you want
MsgBox "Found."
Exit Do
End If

DoEvents
Loop

Exit Sub

MyErrorHandler:
MsgBox "FindHeading1" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Sub

关于perl - 获取 Word 文档特定部分中的段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com