use CGI; use Win32::OLE::Const 'Microsoft Word'; use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Const 'Microsoft PowerPoint'; use strict; my $q = new CGI; my $file_name = $q->param('file'); if ( $file_name eq '' ) { $file_name = $ARGV[0]; } my $in_dir = "C:\\some_dir\\"; my $out_dir = "C:\\some_other_dir\\"; # die on errors... $Win32::OLE::Warn = 3; if ( $file_name =~ m/\.doc$/ ) { convert_word( $file_name, $in_dir, $out_dir ); } elsif ( $file_name =~ m/\.xls$/ ) { convert_excel( $file_name, $in_dir, $out_dir ); } elsif ( $file_name =~ m/\.ppt$/ ) { convert_powerpoint( $file_name, $in_dir, $out_dir ); } exit; ################## sub convert_word { ################## my ( $file_name, $in_dir, $out_dir ) = @_; # get already active Word application or open new or die my $word = ( Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application', 'Quit') || print Win32::OLE->LastError ); my $wd_in_filename = $in_dir.$file_name; my $word_doc = $word->Documents->Open($wd_in_filename); my $wd_out_filename = $out_dir.$file_name.".htm"; $word_doc->SaveAs( { FileName => "$wd_out_filename", FileFormat => 8 } ); # File Format 8 = HTML $word_doc->Close(); $word->Quit(); } ################### sub convert_excel { ################### my ( $file_name, $in_dir, $out_dir ) = @_; # get already active Excel application or open new or die my $excel = ( Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || print Win32::OLE->LastError ); my $xl_in_filename = $in_dir.$file_name; my $excel_doc = $excel->Workbooks->Open($xl_in_filename) or die "Open Failed"; my $excel_sheet = $excel_doc->Worksheets(1); my $xl_out_filename = $out_dir.$file_name.".htm"; unlink $xl_out_filename if -f $xl_out_filename; $excel_sheet->SaveAs( { 'FileName' => $xl_out_filename, 'FileFormat' => xlHtml } ); $excel_doc->Close(); $excel->Quit(); } ######################## sub convert_powerpoint { ######################## my ( $file_name, $in_dir, $out_dir ) = @_; # get already active PowerPoint application or open new or die my $powerpoint = ( Win32::OLE->GetActiveObject('PowerPoint.Application') || Win32::OLE->new('PowerPoint.Application', 'Quit') || print Win32::OLE->LastError ); my $pp_in_filename = $in_dir.$file_name; $powerpoint->{Visible} = 1; $powerpoint->Activate(); my $powerpoint_doc = $powerpoint->Presentations->Open($pp_in_filename); my $pp_out_html_filename = $out_dir.$file_name.".htm"; my $pp_out_jpg_filename = $out_dir."ns\\".$file_name; ## output JPEG for Netscape users $powerpoint_doc->SaveAs( { FileName => "$pp_out_html_filename", FileFormat => ppSaveAsHTML } ); $powerpoint_doc->SaveAs( { FileName => "$pp_out_jpg_filename", FileFormat => ppSaveAsJPG } ); $powerpoint_doc->Close(); return; }