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

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

I'm writing some Excel chart-generation macros in Perl, and hit a new snag. I did the chart-building I want in Excel with macro-recording turned on, and discovered that some constants I need to use are xlBlah constants, and some others are msoBlah constants.

Thanks!

Replies are listed 'Best First'.
Re: Two sets of Win32::OLE::Const at once??
by poj (Abbot) on Jun 14, 2013 at 17:16 UTC
    Try ;
    #!perl use Win32::OLE; use Win32::OLE::Const; use Win32::OLE::Const 'Microsoft Office 14.0 Object Library'; # test my $hr = Win32::OLE::Const->Load('Microsoft Office 14.0 Object Library +'); foreach my $key (keys %$hr) { printf "$key = %s\n", $hr->{$key}; }
    You may need to change 14.0 to your version.
    poj
Re: Two sets of Win32::OLE::Const at once??
by dasgar (Priest) on Jun 14, 2013 at 20:52 UTC

    In my scripts, I typically have multiple use Win32::OLE::Const statements. Part of could be overkill or my misunderstanding of things. Part of is to pull in constants from multiple libraries.

    Here's what I typically have in my scripts that use Excel.

    use Win32::OLE::Const; use Win32::OLE::Const "Microsoft Office .* Object Library"; use Win32::OLE::Const "Microsoft Excel .* Object Library";

    The first one is the one that might not be necessary and I can't explain why I have it there. I saw it in other scripts, so I have it mine.

    The second one pulls in the constants from the Excel library (xl constants). The third one pulls in the constants from the Microsoft Office library (mso constants). By having ".*" instead of a particular numerical value in those two calls, this should in theory work with any version of Office and Excel - at least it's worked for me so far. (NOTE: This pulls in the constants, but other portions of your code may need to be modified due to changes in some commands between Office/Excel versions.)

    I've seen some code out there that tries to manually set the needed constants, but I don't want to spend the time to look up the values for all of the constants. With these use statements, I can just directly use the constants like they are used in the macros and the OLE library documentation.