2

StrawberryPerl v 5.014 と Win32::OLE を使用して、Windows 7 システムでプロジェクトに取り組んでいます。

Windows XP SP3 を実行する 2 台目の 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.

このエラーは、私が言及した最初の元のシステムでは表示されません。

何をすべきか?

ティア、ヘレン

プログラムからの抜粋は次のとおりです。

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

4

1 に答える 1

1

この問題は、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

于 2012-08-07T08:44:26.763 に答える