http://www.perlmonks.org?node_id=992448

sumit07 has asked for the wisdom of the Perl Monks concerning the following question:

hello perl monks help me solve it error: Can't call method "CustomDocumentProperties" on an undefined value at powerpoint .pl line 10. code is below please solve it thanks in advance
use strict; use Win32::OLE qw(in); use Win32::OLE::Const 'Microsoft Office'; my $Word = Win32::OLE->new('Word.Application', 'Quit'); my $PowerPoint = Win32::OLE->new('PowerPoint.Application', 'Quit'); my $Watermark = $Word->Documents->Open('C:\Users\sumit\Desktop\test\D +oc1.doc'); my $ppt = $PowerPoint->Presentations->Open('C:\Users\sumit\Desktop\te +st\Presentation1.ppt'); my $Powerprop = $ppt->CustomDocumentProperties(); foreach my $Property (in $Watermark->CustomDocumentProperties) { my $Name = $Property->Name; local $Win32::OLE::Warn = 0; my $Value = $Property->Value; # $Property->{Value}='test'; $Value = '***Error***' if Win32::OLE->LastError; $Value = '<undef>' unless defined $Value; $Powerprop->Invoke('Add',{ Name => $Name, LinkToContent => 0, Type => 4, Value => $V +alue } ); printf "%s %s = %s\n", $Name, '.' x (40-length($Name)), $Property- +>Value; } $ppt->Save(); $ppt->Close(); $PowerPoint->Quit(); $Watermark->close(); $Word->Quit();

Replies are listed 'Best First'.
Re: win32 ole and power point
by Old_Gray_Bear (Bishop) on Sep 08, 2012 at 14:59 UTC
    So, what happens if line 8 (my $ppt = $PowerPoint->Presentations->Open('C:\Users\sumit\Desktop\test\Pr­esentation1.ppt');) fails? You really do need to check for errors after trying to open files, you never know what might have happened unless you check.

    ----
    I Go Back to Sleep, Now.

    OGB

      ++Old Gray Bear

      I knew I was missing something when I posted my response but I guess the coffee hasn't kicked in yet.

Re: win32 ole and power point
by Mr. Muskrat (Canon) on Sep 08, 2012 at 14:57 UTC

    CustomDocumentProperties is a property so access it as such.

    my $Powerprop = $ppt->{CustomDocumentProperties};

    There may be other issues with your code but I stopped looking when I got to that line. *shrug*