Warum ist die Anzahl der Seiten in einem Word-Dokument unterschiedlich in Perl und Word VBA?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe einen (Satz) Word-Dokument (e), für die ich verschiedene Eigenschaften (Anzahl der Seiten, Autor, etc.) mit Win32 :: OLE in Perl zu bekommen bin versucht:

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

Das gibt 4 Seiten. Aber die tatsächliche Anzahl der Seiten in dem Dokument ist 9. Die Anzahl der Seiten im ersten Abschnitt ist 4. Ich die Gesamtzahl der Seiten im Dokument werden soll.

Wenn in Word VBA ich Folgendes tun:

MsgBox ActiveDocument.BuiltInDocumentProperties("Number of pages")

Dies zeigt 9. Die Anzahl der Seiten in den Eigenschaften / Statistik-Seite angezeigt ist 9.

Muss ich eine neu zu berechnen zwingen? Gibt es eine Möglichkeit, die Ole-Bibliothek zu bitten, eine neu zu berechnen zu zwingen, oder muss ich separat jeden Abschnitt behandeln?

Ich bin auf XP, Word 2007, ActivePerl v5.10.0.

War es hilfreich?

Lösung

#!/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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top