Pourquoi le nombre de pages d'un document Word est-il différent dans Perl et Word VBA?

StackOverflow https://stackoverflow.com/questions/820348

  •  03-07-2019
  •  | 
  •  

Question

J'ai un ou plusieurs documents Word pour lesquels j'essaie d'obtenir différentes propriétés (nombre de pages, auteur, etc.) à l'aide de Win32 :: OLE en Perl:

print $MSWord->Documents->Open($name)->
BuiltInDocumentProperties->{"Number of pages"}->value . " \n";

Ceci renvoie 4 pages. Mais le nombre réel de pages dans le document est de 9. Le nombre de pages dans la première section est de 4. Je souhaite connaître le nombre total de pages du document.

Si, dans Word VBA, je procède comme suit:

MsgBox ActiveDocument.BuiltInDocumentProperties("Number of pages")

Ceci affiche 9. Le nombre de pages affichées dans la page Propriétés / Statistiques est de 9.

Dois-je forcer un recalcul? Existe-t-il un moyen de demander à la bibliothèque OLE de forcer un recalcul ou dois-je traiter chaque section séparément?

Je suis sur XP, Word 2007, ActivePerl v5.10.0.

Était-ce utile?

La solution

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;

my $word = get_word();
$word->{Visible} = 1;

my $doc = $word->{Documents}->Open(catfile $ENV{TEMP}, 'test.doc');
$doc->Repaginate;

my $props = $doc->BuiltInDocumentProperties;
my $x = $props->Item(wdPropertyPages)->valof;
print "$x\n";

$doc->Close(0);

sub get_word {
    my $word;
    eval {
        $word = Win32::OLE->GetActiveObject('Word.Application');
    };

    die "$@\n" if $@;

    unless(defined $word) {
        $word = Win32::OLE->new('Word.Application', sub { <*>[0]->Quit })
            or die "Oops, cannot start Word: ", 
                   Win32::OLE->LastError, "\n";
    }
    return $word;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top