Я новичок в модуле win32:ole в perl. Я пытаюсь напечатать строку данных таблицы MS Word в командной строке. Но я могу напечатать только последнюю строку таблицы. Не могли бы вы помочь мне решить эту проблему? Заранее спасибо.
Ниже мой код:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
my $word = get_word();
$word->{DisplayAlerts} = wdAlertsNone;
$word->{Visible} = 1;
my $doc = $word->{Documents}->Open('C:\\PerlScripts\\myTest.docx');
my $tables = $word->ActiveDocument->{'Tables'};
for my $table (in $tables)
{
my $tableText = $table->ConvertToText({ Separator => wdSeparateByTabs });
print "Table: ". $tableText->Text(). "\n";
}
$doc->Close(0);
sub get_word
{
my $word;
eval { $word = Win32::OLE->GetActiveObject('Word.Application');};
die "$@\n" if $@;
unless(defined $word)
{
$word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
or die "Oops, cannot start Word: ", Win32::OLE->LastError, "\n";
}
return $word;
}
eval { ... }
, когда вы все равно потом собираетесьdie "$@\n" if $@
. Есть? - person ruakh   schedule 02.11.2012use strict
не действует, возможно, чтоwdSeparateByTabs
обрабатывается как строка'wdSeparateByTabs'
, и аналогично для других констант. (Я имею в виду, очевидно, что настоящая проблема в этом случае будет заключаться в том, чтоuse Win32::OLE::Const 'Microsoft Word'
не загружает константу, которую ожидает OP, но отсутствиеuse strict
может скрыть эту проблему.) - person ruakh   schedule 02.11.2012