##################### # # Office package to handle all # types of office files (but I # simplified it, yet give same # problem # ##################### package LTG::DocBuddy::OfficeSub; use strict; use diagnostics; use WIN32::OLE; use WIN32::OLE::Variant; require Exporter; use vars qw(@ISA @EXPORT); use LTG::DocBuddy::Config qw($DEBUG); use LTG::DocBuddy::WordSub; @ISA = qw(Exporter); @EXPORT = qw(parse_office_doc); $DEBUG && print "Loading LTG::DocBuddy::OfficeSub package...\n"; my ($word_app, $excel_app, $ppt_app, $access_app); $word_app = Win32::OLE->new('Word.Application', 'Quit(0)'); sub parse_office_doc { $DEBUG && print "Calling LTG::DocBuddy::OfficeSub->parse_office_doc(@_) method...\n"; my $file = shift; my %file_info = (); my $obj; my $whole_text; if ($obj = $word_app->Documents->open($file, 0, 1)) { %file_info = read_doc_properties($obj); $file_info{'Style'} = {get_word_content($obj)}; foreach my $style (keys %{$file_info{'Style'}}) { $whole_text .= ${$file_info{'Style'}}{$style}; } delete $file_info{'Style'}; $obj->Close(0); } if (not $obj) { return { error => "$file: GetObject not successful: ". Win32::OLE->LastError() }; } $file_info{'Whole text'} = $whole_text; return %file_info; } sub read_doc_properties { $DEBUG && print "Calling LTG::DocBuddy::OfficeSub->read_doc_properties(@_) method...\n"; my $obj = shift; my %file_info; if (my $properties = $obj->{BuiltInDocumentProperties}) { foreach my $prop (in $properties) { $file_info{$prop->{'Name'}} = "$prop->{'Value'}" if ($prop->{'Value'}); } } return %file_info; } 1;