Wie wende ich mit Win32 :: Ole in Perl die Formatierung auf ein bestimmtes Wort in einer docx-Datei an?
Zum Beispiel enthält meine docx-Datei die folgenden Sätze:
Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel
Ich möchte allen Vorkommen des Wortes "Perl" einen fett gedruckten Stil zuweisen:
Das ist ein Perl example
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl example
Ich habe mir bisher folgendes Skript ausgedacht:
use strict; use warnings;
use Win32::OLE::Const 'Microsoft Word';
my $file = 'E:\test.docx';
my $Word = Win32::OLE->new('Word.Application', 'Quit');
$Word->{'Visible'} = 0;
my $doc = $Word->Documents->Open($file);
my $paragraphs = $doc->Paragraphs() ;
my $enumerate = new Win32::OLE::Enum($paragraphs);
while(defined(my $paragraph = $enumerate->Next())) {
my $text = $paragraph->{Range}->{Text};
my $sel = $Word->Selection;
my $font = $sel->Font;
if ($text =~ /Perl/){
$font->{Bold} = 1;
}
$sel->TypeText($text);
}
$Word->ActiveDocument->Close ;
$Word->Quit;
Aber es wurde der gesamte Absatz fett formatiert und die Sätze werden nicht an ihrer ursprünglichen Stelle bearbeitet. Es gibt mir sowohl die geänderte Version als auch die Originalversion wie folgt:
Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel
Dies ist ein Perl-Beispiel
Dies ist ein Python-Beispiel
Dies ist ein weiteres Perl-Beispiel
Wie soll ich mein Problem beheben. Irgendwelche Hinweise? Danke wie immer:)
AKTUALISIERE
Problem gelöst! Vielen Dank an@ Zaid, und@ cjm:)
Hier ist der Code, der wunderbar funktioniert:
while ( defined (my $paragraph = $enumerate->Next()) ) {
my $words = Win32::OLE::Enum->new( $paragraph->{Range}->{Words} );
while ( defined ( my $word = $words->Next() ) ) {
my $font = $word->{Font};
$font->{Bold} = 1 if $word->{Text} =~ /Perl/;
}
}