📄 ch23_05.htm
字号:
<html><head><title>Win32::OLE::Const (Perl in a Nutshell, 2nd Edition)</title><link rel="stylesheet" type="text/css" href="../style/style1.css" /><meta name="DC.Creator" content="Stephen Spainhour" /><meta name="DC.Format" content="text/xml" scheme="MIME" /><meta name="DC.Language" content="en-US" /><meta name="DC.Publisher" content="O'Reilly & Associates, Inc." /><meta name="DC.Source" scheme="ISBN" content="0596002416L" /><meta name="DC.Subject.Keyword" content="stuff" /><meta name="DC.Title" content="Perl in a Nutshell, 2nd Edition" /><meta name="DC.Type" content="Text.Monograph" /></head><body bgcolor="#ffffff"><img src="gifs/smbanner.gif" usemap="#banner-map" border="0" alt="Book Home" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Java and XSLT" /><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch23_04.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228" /><td align="right" valign="top" width="228"><a href="ch24_01.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr></table></div><h2 class="sect1">23.5. Win32::OLE::Const</h2><p><a name="INDEX-3469" />While browsing through thedocumentation for an automation object, you may have come acrossreferences to constant values. For example, ifyou're trying to save an Excel workbook to adifferent file format, you need to provide a file for- mat constant.Since the server documentation typically provides symbolic con-stants (e.g., <tt class="literal">xlExcel5</tt> or<tt class="literal">xlTemplate</tt>), we need a way to access those fromPerl. This is the purpose of Win32::OLE::Const, which imports theconstants from an automation object into your script.</p><p>You can either import the constants directly into your namespace assubs that return the constant value, or you can have them returned asa hash reference with the constant name as the key and its value asthe value. Here's an example of the former:</p><blockquote><pre class="code">use Win32::OLE::Const ("Microsoft Excel");print "xlExcel5 = ", xlExcel5, "\n";</pre></blockquote><p>This produces something like: </p><blockquote><pre class="code">xlExcel5 = 39</pre></blockquote><p><a name="INDEX-3470" />Here's an exampleusing the <tt class="literal">Load</tt> method to return a hash referencepopulated with the constants and their values (this produces the sameoutput as the previ- ous example, of course):</p><blockquote><pre class="code">use Win32::OLE::Const;my $constants = Win32::OLE::Const->Load("Microsoft Excel");print "xlExcel5 = $constants->{xlExcel5}\n";</pre></blockquote><p>Notice that, in both cases, we're supplying aregular expression for the name of the type library from which wewant to import. <tt class="literal">Win32::OLE::Const</tt> searches theregistry for matching type libraries and loads the one with thehighest version number (you can override this by supplying theversion you want). You can also specify the languageyou'd like. The parameters (for either<tt class="literal">Load</tt> or <tt class="literal">Win32::OLE::Const</tt>) arethe typelib regular expression, the major version number, the minorversion number, and the locale (LCID).</p><p>You can also provide the <tt class="literal">Load</tt> method with anautomation object, which is then queried for its type library.Interestingly, the documentation notes that this seems to be slowerthan searching the Registry (though neither is really speedy with alarge automation server like Excel). Here's anexample of that:</p><blockquote><pre class="code">use Win32::OLE;use Win32::OLE::Const;# Create an Excel application objectmy $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);</pre></blockquote><p>Using <tt class="literal">Load</tt> (to get a hash reference for theconstants) may be preferable to importing all of the constants intoyour namespace. Some automation servers pro- vide a large number ofconstants (the current version of Excel has some 900+), so importingthem into your namespace can clutter things considerably.<a name="INDEX-3471" /><a name="INDEX-3472" /></p><hr width="684" align="left" /><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch23_04.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228"><a href="index.htm"><img src="../gifs/txthome.gif" alt="Home" border="0" /></a></td><td align="right" valign="top" width="228"><a href="ch24_01.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr><tr><td align="left" valign="top" width="228">23.4. Win32::OLE::Variant</td><td align="center" valign="top" width="228"><a href="index/index.htm"><img src="../gifs/index.gif" alt="Book Index" border="0" /></a></td><td align="right" valign="top" width="228">24. ODBC Extension for Win32</td></tr></table></div><hr width="684" align="left" /><img src="../gifs/navbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links" /><p><p><font size="-1"><a href="copyrght.htm">Copyright © 2002</a> O'Reilly & Associates. All rights reserved.</font></p><map name="library-map"><area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -