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

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?


Replies are listed 'Best First'.
Re: Two sets of Win32::OLE::Const at once??
by poj (Monsignor) 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.
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.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1038992]
Approved by davies
Front-paged by toolic
[marto]: clever stuff
[Corion]: marto: Thanks for pointing me to Tinc - I found at least some article that suggests that what I want would be possible with Tinc. Now I can try that out :)
[marto]: I think you can do what you want without too much hassle, but yeah, please try and let me know if it works well :)
[marto]: sadly I've still not remembered the name of that x86 all in one we discussed
[Corion]: marto: Heh - I looked at the Intel things and they were all at EUR 80 or upwards, and that's a bit too much (or rather, for that money, I'd look for a NAS already)

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (9)
As of 2018-01-17 15:13 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (201 votes). Check out past polls.