加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:19:11 所属栏目:大数据 来源:网络整理
导读:我编写了一个Perl脚本,使用 Win32::OLE读取Microsoft Word文档内容. 我的问题是包含编号列表的文档(以1,2,3,…开头).我的Perl脚本无法获得该号码.我只能得到文字内容,而不是数字. 请建议如何将编号列表转换为纯文本,以保留编号和文本. 解决方法 我的博客文章
我编写了一个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 one

Back 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是必不可少的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读