gpt4 book ai didi

perl - 如何在 Perl 中使用 Win32::Ole 将格式应用于 docx 文件中的特定单词?

转载 作者:行者123 更新时间:2023-12-04 00:48:31 25 4
gpt4 key购买 nike

例如,我的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 示例

我该如何解决我的问题。任何指针?一如既往的感谢:)

更新

问题解决了!非常感谢 @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 - 如何在 Perl 中使用 Win32::Ole 将格式应用于 docx 文件中的特定单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774799/

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