Perl + Excel:“使用Win32 :: OLE :: Const”没有效果

时间:2012-08-06 14:01:55

标签: windows perl ole win32ole strawberry-perl

我一直在使用StrawberryPerl v 5.014和Win32 :: OLE在Windows 7系统上开展项目。

我正在尝试使用运行Windows XP SP3的第二台PC来同时开发相同的项目。在新系统上,我安装了Strawberry Perl v 5.016,并使用cpanp安装Win32 :: OLE和Win32 :: OLE :: Const。

我在新系统中使用相同的脚本源。

事实证明,在新系统中,不知何故

use Win32::OLE::Const 'Microsoft Excel';

没有效果。我收到了错误:

Bareword "xlExcel8" not allowed while "strict subs" in use in StatementExcel.pm line 159.

此错误未显示在我提到的第一个原始系统中。

怎么办?

TIA,海伦

以下是该计划的一些摘录:

package  StatementExcel;
require  Exporter;
@ISA   = qw(Exporter);
@EXPORT  = qw(LoadExcel ProcessPreparedSheet);
use strict;
use warnings;
use Encode;
use 5.016;
use utf8;
use Win32::Console;
use autodie; 
use warnings    qw< FATAL  utf8     >;
use StateConversion;
use Carp;
use Win32::OLE  qw(CP_UTF8);
use Win32::OLE::Const 'Microsoft Excel';
use Cwd;
use Text::CSV::Unicode;
use File::BOM qw( :all );
use List::MoreUtils 'first_index';
...
$xlBook -> SaveAs( $xlFile, xlExcel8);

$i = Win32::OLE->LastError();
if ($i) {
   PrintT $parms{LogStructRef}{HANDLE}, "Error trying to save Excel file:\n", $i;
}   # end if ($i)
PrintT $parms{LogStructRef}{HANDLE}, 'Press <return> to continue...';   # Wait for user input...
$j = <STDIN>;
# Clean up
$xlBook->{Saved} = 1;
$xlApp->Quit;
$xlBook = 0;
$xlApp = 0;
...

注意:在PerlMonks上交叉发布:http://www.perlmonks.org/?node_id=985596

1 个答案:

答案 0 :(得分:0)

事实证明,问题的出现是因为Excel 2010和Excel 2003之间的OLE对象库存在差异。 在Win XP系统上,安装了Excel 2003。在Windows 7系统上,安装了Excel 2010。保存Excel文件时,我指示使用“xlExcel8”OLE常量将其保存为Excel 2003“xls”格式(而不是Excel 2010的“xlsx”格式)。

事实证明,这个常量在OLE 2003对象库中不存在。

解决方案很简单:保存文件而不指定格式 - 它使用默认值。

另请参阅:http://www.perlmonks.org/?node_id=985780