3

私はこれと2日間戦っていますが、解決策が見つからず、イライラしています. Cygwinで以下のコードを使用しているときに、このエラーが発生します

「Microsoft Office Excel」からの OLE 例外: Excel は「Empty.xls」にアクセスできません。
ドキュメントは読み取り専用または暗号化されている可能性があります。Win32::OLE(0.1703) エラー 0x800a03ec METHOD/PROPERTYGET "Open" at m:/In/make_excel.pl 行 24

問題は、DOSプロンプトの下で完全に機能していることです。もちろん、ファイルは読み取り専用ではありません。ファイル形式の解釈に問題があると思います。ヒントはありますか?高く評価されます。

#!/usr/bin/perl
use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Excel';
$Excel = Win32::OLE->GetActiveObject('Excel.Application') ||
   Win32::OLE->new('Excel.Application');
$Excel->{'Visible'} = 0;        #0 is hidden, 1 is visible
$Excel->{DisplayAlerts}=0;  #0 is hide alerts
# Open File and Worksheet
my $Book = $Excel->Workbooks->Open('C:\Empty.xls'); 
...
4

2 に答える 2

3

MS Excel には、MS Windows パスが必要です。

問題は

my $seedProject = "$ENV{'HOME'}/Empty.xls";

'/' の代わりに '\\' を使用してください: Excel は Windows パスでのみ動作します。$ENV{HOME} のパス区切りも確認してください。

于 2012-10-04T20:05:48.080 に答える
1

Cygwin で作業する場合、通常の Windows ユニバースとその Cygwin コーナーを十分に分離しておくことが非常に重要です。そもそもCygwin がWin32::OLEインストールされておらず、どういうわけか ActiveState の lib ディレクトリが@INCCygwin のディレクトリにperl(環境設定などを介して) 追加されている可能性は十分にあります。これはほとんどの場合、純粋な Perl モジュールで機能しますが、XS を使用するものはすべて台無しになります。

Cygwin にインストールすることで、ActiveState の lib ディレクトリの前にWin32::OLE置くことができるため、Cygwinが正しいモジュールを見つけられるようになります。ただし、次のようなものを実行する必要があります。@INCperl

$ perl -e 'print "@INC\n"'

Cygwin プロンプトで、Cygwin パスのみが表示されるようにします。

また、モジュールを手動でビルドするのではなく、Cygwin のperl-libwin32パッケージを 経由でインストールすることもできます。setup.exe

于 2012-07-10T14:39:39.553 に答える