While browsing through the documentation for an
automation object, you may have come across references to constant
values. For example, if you’re trying to save an Excel workbook to a
different file format, you need to provide a file for- mat constant.
Since the server documentation typically provides symbolic con- stants
(e.g., xlExcel5
or xlTemplate
), we need a way to access those
from Perl. This is the purpose of Win32::OLE::Const, which imports the
constants from an automation object into your script.
You can either import the constants directly into your namespace as subs that return the constant value, or you can have them returned as a hash reference with the constant name as the key and its value as the value. Here’s an example of the former:
use Win32::OLE::Const ("Microsoft Excel"); print "xlExcel5 = ", xlExcel5, " ";
This produces something like:
xlExcel5 = 39
Here’s an example using the Load
method to return a hash reference
populated with the constants and their values (this produces the same
output as the previ- ous example, of course):
use Win32::OLE::Const; my $constants = Win32::OLE::Const->Load("Microsoft Excel"); print "xlExcel5 = $constants->{xlExcel5} ";
Notice that, in both cases, we’re supplying a regular expression
for the name of the type library from which we want to import.
Win32::OLE::Const
searches the
registry for matching type libraries and loads the one with the
highest version number (you can override this by supplying the version
you want). You can also specify the language you’d like. The
parameters (for either Load
or
Win32::OLE::Const
) are the typelib
regular expression, the major version number, the minor version
number, and the locale (LCID).
You can also provide the Load
method with an automation object, which is then queried for its type
library. Interestingly, the documentation notes that this seems to be
slower than searching the Registry (though neither is really speedy
with a large automation server like Excel). Here’s an example of
that:
use Win32::OLE; use Win32::OLE::Const; # Create an Excel application object my $xl = Win32::OLE->new('Excel.Application', 'Quit') || die "Can't create Excel: ", Win32::OLE->LastError; # Import the constants from it my $constants = Win32::OLE::Const->Load($xl);
Using Load
(to get a hash
reference for the constants) may be preferable to importing all of the
constants into your namespace. Some automation servers pro- vide a
large number of constants (the current version of Excel has some
900+), so importing them into your namespace can clutter things
considerably.
3.144.41.229