¿Por qué la cantidad de páginas en un documento de Word es diferente en Perl y Word VBA?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un (conjunto de) documentos de Word para los que estoy tratando de obtener varias propiedades (número de páginas, autor, etc.) utilizando Win32 :: OLE en Perl:

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

Esto devuelve 4 páginas. Pero el número real de páginas en el documento es 9. El número de páginas en la primera sección es 4. Quiero el número total de páginas en el documento.

Si, dentro de Word VBA, hago lo siguiente:

MsgBox ActiveDocument.BuiltInDocumentProperties("Number of pages")

Esto muestra 9. El número de páginas mostradas en la página Propiedades / Estadísticas es 9.

¿Tengo que forzar un recálculo? ¿Hay alguna manera de pedirle a la biblioteca OLE que fuerce un recálculo o tengo que tratar cada sección por separado?

Estoy en XP, Word 2007, ActivePerl v5.10.0.

¿Fue útil?

Solución

#!/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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top