0

私がする必要があるのは...ワードファイルを読み、フォントのプロパティに基づいて、ヘッダーまたは段落として区別するためにそれらの前にタグを追加します。ただし、Perlを使用してこれを行う必要があります。 ??? どんな助けでもありがたいです。ありがとう!!

4

3 に答える 3

4

@ニキータ、これはあなたにそれがどのように行われたかの詳細なビューを与えるでしょう:

#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE::Const 'Microsoft Word';
#$Win32::OLE::CP = CP_UTF8;
binmode STDOUT, 'encoding(utf8)';

# OPEN FILE SPECIFIED AS FIRST ARGUMENT
my $fname=$ARGV[0]; 
my $fnameFullPath = `cygpath.exe -wa $fname`;
$fnameFullPath =~ s/\\/\\\\/g;
$fnameFullPath =~ s/\s*$//;
unless (-e $fnameFullPath) { print "Error: File did not exists\n"; exit 1;}

# STARTING OLE
my $Word = Win32::OLE->GetActiveObject('Word.Application')
    || Win32::OLE->new('Word.Application','Quit')
    or die Win32::OLE->LastError();

$Word->{'Visible'} = 0;
my $doc = $Word->Documents->Open($fnameFullPath);
my $paragraphs = $doc->Paragraphs() ;
my $enumerate = new Win32::OLE::Enum($paragraphs);

# PROCESSING PARAGRAPHS
while(defined(my $paragraph = $enumerate->Next())) {

    my $text = $paragraph->{Range}->{Text};
    my $sel = $Word->Selection;
    my $font = $sel->Font;

    if ($font->{Size} == 18){
        print "Text: ", $text, "\n";
        print "Font Bold: ", $font->{Bold}, "\n";
        print "Font Italic: ", $font->{Italic}, "\n";
        print "Font Name: ", $font->{Name}, "\n";
        print "Font Size: ", $font->{Size}, "\n";
        print "=========\n";
    }
}

# CLOSING OLE
$Word->ActiveDocument->Close ;
$Word->Quit;

出力は次のようになります。

テキスト:これは、さまざまなフォントとサイズを含むドキュメントファイルです。ドキュメントには、ヘッダーとフッターも含まれています(フォント:TNR、サイズ:18)
フォント太字:0
フォントイタリック:0
フォント名:Times New Roman
フォントサイズ:18
=========
テキスト:これはPerlの例です(フォントTNR、サイズ:12)
フォント太字:0
フォントイタリック:0
フォント名:Times New Roman
フォントサイズ:18
=========
テキスト:これはPythonの例です(フォント:Courier New、サイズ:10)
フォント太字:0
フォントイタリック:0
フォント名:Times New Roman
フォントサイズ:18
=========
于 2013-03-21T13:55:16.387 に答える
3

処理する必要のある単語を特定するのに役立つ情報がもっと必要です。私の例では、テキストSomeを検索しています(これは私の* .docxファイルです

#!/usr/bin/perl

use Modern::Perl;
use Win32::OLE;

use Win32::OLE qw(in with);
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;

print "Starting Word\n";

    my $Word = Win32::OLE->GetActiveObject('Word.Application') ||
           Win32::OLE->new('Word.Application');
    $Word->{'Visible'}     = 1;
    $Word->{DisplayAlerts} = 0;

my $File = $Word->Documents->Open( "./fonts.docx" ) or die Win32::OLE->LastError;

$Word->Selection->HomeKey(wdStory);

$Word->Selection->Find->{'Text'} = 'Some';

$Word->Selection->Find->Execute();

say "Font size: [", $Word->Selection->Font->Size(), "]";
say "Font name: [", $Word->Selection->Font->Name(), "]";

$Word->Quit;
于 2013-03-21T13:57:45.523 に答える
0

OLE自動化を使用してみてください。Win32::OLEモジュールが役立ちます。この方法では、WordOLEAPIに関するより深い知識が必要です。

于 2013-03-21T12:34:30.753 に答える