gpt4 book ai didi

perl - 使用 Perl 和 Win32::OLE,如何将 Word 文档中的编号列表转换为纯文本?

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

我编写了一个 Perl 脚本来使用 Win32::OLE 读取 Microsoft Word 文档内容.

我的问题是文档包含编号列表(以 1、2、3、... 开头)。我的 Perl 脚本无法获取该数字。我只能获取文本内容,不能获取数字。

请建议如何将该编号列表转换为纯文本,同时保留编号和文本。

最佳答案

我的博文Extract bullet lists from PowerPoint slides using Perl and Win32::OLE 演示如何使用 PowerPoint 执行此操作。事实证明,使用 Word 可以更简单地完成任务。

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

use Carp qw( croak );
use Const::Fast;
use Path::Class;
use Try::Tiny;
use Win32::OLE;
use Win32::OLE::Const ('Microsoft.Word');
use Win32::OLE::Enum;

$Win32::OLE::Warn = 3;

run(@ARGV);

sub run {
my $docfile = shift;
# Croaks if it cannot resolve
$docfile = file($docfile)->absolute->resolve;

my $word = get_word();
my $doc = $word->Documents->Open(
{
FileName => "$docfile",
ConfirmConversions => 0,
AddToRecentFiles => 0,
Revert => 0,
ReadOnly => 1,
}
);
my $pars = Win32::OLE::Enum->new($doc->Paragraphs);

while (my $par = $pars->Next) {
print_paragraph($par);
}
}

sub print_paragraph {
my $par = shift;
my $range = $par->Range;
my $fmt = $range->ListFormat;
my $bullet = $fmt->ListString;
my $text = $range->Text;

unless ($bullet) {
say $text;
return;
}

my $level = $fmt->ListLevelNumber;
say ">" x $level, join(' ', $bullet, $text);

return;
}

sub get_word {
my $word;

try { $word = Win32::OLE->GetActiveObject('Word.Application') }
catch { croak $_ };

return $word if $word;

$word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit });
return $word if $word;

croak sprintf('Cannot start Word: %s', Win32::OLE->LastError);
}

给定以下 Word 文档:

A simple Word document with bullet lists

它生成输出:

This is a document>1. This is a numbered list>2. Second item in the numbered list>3. Third oneBack to normal paragraph.>>a. Another list>>b. Yup, here comes the second item>>c. Not so sure what to put here>>>i. Sub-item

Object Browser是不可或缺的。

关于perl - 使用 Perl 和 Win32::OLE,如何将 Word 文档中的编号列表转换为纯文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757926/

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