У меня есть файл документа Ms-Word (также может быть * DOCX). Мне нужно получить все стили, используемые в документе, с помощью сценария perl.

Я пробовал некоторые коды в поисковой системе, но мне это не удалось.

use Win32::OLE;
use Win32::OLE::Enum;
use File::Copy;
#use strict;

my $fileName = "d:\\test.doc";
my $document = Win32::OLE -> GetObject($fileName);
#Creating a new excel sheet
#my $xl_app=Win32::OLE->new('word.Application','Quit');

my $paragraphs = $document->Paragraphs();
my $enumerate = new Win32::OLE::Enum($paragraphs);

while(defined($enumerate->Next()))
{
    $style = $paragraph->{'Styles'}->{'Normal'};
    $text = $paragraph->{'Range'}->{'Text'};
    #$text =~ s/[\n\r]//g;
    #$text =~ s/\x0b/\n/g;
    #$text =~ s/\x07//g;
    print "\nStyle = $style";
    print "\nText = $text";
}

Документ входного слова:

enter image description here

Вывод: как в текстовом файле "Normal style found: Line number nn"

Может ли кто-нибудь помочь мне в этом. Заранее спасибо.

1
ssr1012 25 Ноя 2020 в 12:27

1 ответ

Лучший ответ

Для меня сработало следующее:

use feature qw(say)
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Enum;
use constant wdFirstCharacterLineNumber => 10;
my $fn = "d:\\test.docx";
my $document = Win32::OLE->GetObject($fn) or die Win32::OLE->LastError;
my $word_app = Win32::OLE->GetActiveObject('Word.Application') or die Win32::OLE->LastError;
my $paragraphs = $document->Paragraphs();
my $num_para = $document->Paragraphs->Count;
for my $i (1..$num_para) {
    my $paragraph = $paragraphs->Item($i);
    my $style = $paragraph->{Style}->{NameLocal};
    if ($style eq "Normal") {
        my $range = $paragraph->Range;
        $range->Select;
        my $line_no = $word_app->Selection->Information(wdFirstCharacterLineNumber);
        say "Normal style found: Line number $line_no";
    }
}
$document->close();
1
Håkon Hægland 27 Ноя 2020 в 16:08