1
저는 워드 문서가 수백 개가 넘는 디렉토리가 있습니다. 각 문서에는 표준화 된 테이블 세트가 들어 있습니다. 이 테이블을 구문 분석하고 데이터를 추출해야합니다. 전체 테이블을 뱉어내는 스크립트를 개발했습니다.WIN32 :: OLE perl 패키지를 사용하여 Word 테이블을 탐색하려면 어떻게해야합니까?
#!/usr/bin/perl;
use strict;
use warnings;
use Carp qw(croak);
use Cwd qw(abs_path);
use Path::Class;
use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
=d
my $datasheet_dir = "./path/to/worddocs";
my @files = glob "$datasheet_dir/*.doc";
print "scalar: ".scalar(@files)."\n";
foreach my $f (@files){
print $f."\n";
}
=cut
#my $file = $files[0];
my $file = "word.doc";
print "file: $file\n";
run(\@files);
sub run {
my $argv = shift;
my $word = get_word();
$word->{DisplayAlerts} = wdAlertsNone;
$word->{Visible} = 1;
for my $word_file (@$argv) {
print_tables($word, $word_file);
}
return;
}
sub print_tables {
my $word = shift;
my $word_file = file(abs_path(shift));
my $doc = $word->{Documents}->Open("$word_file");
my $tables = $word->ActiveDocument->{Tables};
for my $table (in $tables) {
my $text = $table->ConvertToText(wdSeparateByTabs)->Text;
$text =~ s/\r/\n/g;
print $text, "\n";
}
$doc->Close(0);
return;
}
sub get_word {
my $word;
eval { $word = Win32::OLE->GetActiveObject('Word.Application'); 1 }
or die "[email protected]\n";
$word and return $word;
$word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
or die "Oops, cannot start Word: ", Win32::OLE->LastError, "\n";
return $word;
}
세포를 탐색 할 수있는 방법이 있습니까? 첫 번째 열에 특정 값이있는 행만 반환하려고합니까?
예를 들어 다음 표에서 첫 번째 열에 열매가있는 행만 grep하고 싶습니다.
apple pl
banana xml
California csv
pickle txt
Illinois gov
pear doc