Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
Don't ask to ask, just ask
 
PerlMonks  

Two sets of Win32::OLE::Const at once??

by KalTorak (Initiate)
on Jun 14, 2013 at 16:23 UTC ( #1038992=perlquestion: print w/ replies, xml ) Need Help??
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.

  • I can't figure what string to use in my use statement to get the mso constants in my namespace. use Win32::OLE::Const 'Microsoft Excel' gets me the xl constants, but I can't find a string that works for the mso constants. (I've started browsing on this point, and I suspect I can find these all by myself.)
  • How on earth am I going to import two sets of constants into my namespace? The docs I read on Win32::OLE::Const don't say I can ask for a list of exported constants, and I can only use a given library once... am I missing something, or am I stuck?

Thanks!

Comment on Two sets of Win32::OLE::Const at once??
Download Code
Re: Two sets of Win32::OLE::Const at once??
by poj (Curate) 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 (Deacon) 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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1038992]
Approved by davies
Front-paged by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2014-04-17 22:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (458 votes), past polls