.iqyファイルの「データソース」にExcelファイル(.xlsx)が接続されています。私はPerlを使ってExcelファイルを開き、データを更新しました。最初は、私のコードが働いていました。しかし、私のスプレッドシートがリンクされていた.iqyファイルを変更する必要があり、これを実行するとPerlスクリプトが壊れているように見えます。私はPerlでWin32 :: OLEを使用してExcel 2010の.xlsxファイルを解析する際の問題
my $LastRow = $Sheet->UsedRange->Find({What=>"*",
SearchDirection=>xlPrevious,
SearchOrder=>xlByRows})->{Row};
を呼び出し、cmdの出力を読み取ると今では失敗します。「sharing.pl線20でHASHリファレンスとして未定義の値を使用することはできません」私はこれをデバッグしようとしましたが、デバッガでどこで問題が発生するのかを把握する方法を知るために、Win32 :: OLEモジュールの欠点については十分に分かりません。スクリプトのソースコードは、
#!/usr/bin/perl
use Win32::OLE;
use Win32::OLE qw(in with);
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:\shareP\sp.xlsx'); # open Excel file
$Sheet = $Book->Worksheets(1);
# Refresh Data (ActiveWorkbook.RefreshAll)
$Book->RefreshAll();
# Find Last Column and Row
my $LastRow = $Sheet->UsedRange->Find({What=>"*",
SearchDirection=>xlPrevious,
SearchOrder=>xlByRows})->{Row};
my $LastCol = $Sheet->UsedRange->Find({What=>"*",
SearchDirection=>xlPrevious,
SearchOrder=>xlByColumns})->{Column};
####### EDIT: I initially didn't post this portion because it stops
# before reaching it unless I make $LastCol and $LastRow constants
my @hasher;
my $c = "a";
for (my $cn=1; $cn <= $LastCol; $cn++){
for (my $r=2; $r <= $LastRow; $r++){
# stops here with same error if I make $LastCol and $LastRow constants
$hasher[$r-2]{ $Sheet->Range($c.'1')->{Value} } = $Sheet->Range($c.$r)->{Value};
}
$c++;
}
####### end of EDIT
# Save as Excel
$Book->Save();
$Book->Close();
$Excel->Quit();
ありがとうございます。私は本当にこれに固執しています。
「*」がスクロールシート上で手動で実行されていることを確認します。とにかくそれに到達する前に停止して以来、私はsave()とclose()の前にこれよりも多くのコードを削除しました。私は "$ LastRow"と "$ LastCol"変数を定数にしようとしましたが、その後同じコードでコードが停止しました。 (私が投稿に追加したものを参照してください、私は最初にそれを残して申し訳ありません)。しかし、$ LastRowと$ LastColを定数として2回実行すると、2回目の実行時に動作します... 2回目の実行では、excelは最初の実行からまだ開いています。リーチに近づく()。 – user1226409
あなたの追加情報が与えられました...私は、問題が何とか '$ Sheet'が空であることに関係していると推測します。番号ではなくテキスト名でワークシートを参照し、それが役立つかどうかを確認してください – Pynner