簡體   English   中英

如何在Perl中使用Win32 :: Ole將格式應用於docx文件中的特定單詞?

[英]How do I apply formatting to a particular word in a docx file using Win32::Ole in Perl?

例如,我的docx文件包含以下句子:

這是一個Perl的例子
這是一個Python示例
這是另一個Perl示例

我想對所有出現的“ Perl”一詞應用粗體,如下所示:

這是一個Perl的例子
這是一個Python示例
這是另一個Perl示例

到目前為止,我已經提出了以下腳本:

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;

但是它在整個段落中采用了粗體風格,並且沒有在原始位置編輯句子。 它給了我修改后的版本和原始版本,如下所示:

這是一個Perl的例子
這是一個Python示例
這是另一個Perl示例
這是一個Perl的例子
這是一個Python示例
這是另一個Perl示例

我應該如何解決我的問題。 有指針嗎? 像往常一樣謝謝:)

UPDATE

問題解決了! 非常感謝@Zaid@cjm :)

這是很可愛的代碼:

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/;
    }
}

嘗試使用Words方法而不是Text方法。

未經測試:

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/;
    }
}

我對perl一無所知。 但是你看一下辦公室打開的xml

您可以將.docx文件視為zip文件,並進行簡單的搜索和替換,其工作速度比互操作器快一百萬倍。 而且您不必擔心可能會出錯的數百萬種問題。

將您的.docx文件重命名為.zip並打開它,您將明白我的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM