لماذا هي عدد الصفحات في مستند Word مختلفة في بيرل و Word VBA؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي (مجموعة) مستند Word (ق) التي أحاول الحصول على الخصائص المختلفة (عدد الصفحات، المؤلف، الخ) باستخدام Win32 :: OLE في بيرل:

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

وهذا يعود 4 صفحات. ولكن العدد الفعلي للصفحات في الوثيقة هو 9. عدد الصفحات في المقطع الأول هو 4. أريد إجمالي عدد الصفحات في المستند.

إذا، ضمن Word VBA، والقيام بما يلي:

MsgBox ActiveDocument.BuiltInDocumentProperties("Number of pages")

وهذا يعرض 9. عدد الصفحات المعروضة في صفحة خصائص / الاحصائيات هو 9.

هل يجب فرض إعادة حساب؟ هل هناك طريقة ليطلب من مكتبة OLE لفرض إعادة حساب أو القيام لدي لعلاج كل قسم على حدة؟

وأنا على XP، وورد 2007، ActivePerl v5.10.0.

هل كانت مفيدة؟

المحلول

#!/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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top