in reply to Microsoft Works

As sgifford says the easy way is just to use OLE to automate MS Word. You will need M$ Word installed for this to work of course. All we do is open the works doc in Word, then save it as wdFormatDocument. This example will convert all *.wps Works docs in the specified directory.

use Win32::OLE; use Win32::OLE::Const 'Microsoft Word'; my $dir = "C:"; my $ext = "wps"; my @files = map{ s!/!\\!g; $_ } grep{ m/\.($ext)/ } glob( "$dir/*" ); # check if Word exists and is running my $word = Win32::OLE->GetActiveObject('Word.Application'); die "Word not Installed" if $@; # start Word program instance if required or die if unable to unless (defined $word) { $word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit; } ) + or die 'Cannot start Word'; } $word->{Visible} = 0; # set to 1 to watch for my $infile( @files ) { my $doc = $word->{Documents}->Open($infile) or die "Can't open $infile, Reason:$Win32::OLE::LastError"; (my $outfile = $infile ) =~ s/\.\w+$/.doc/; # change file extensi +on to .doc $doc->SaveAs( { FileName => $outfile, FileFormat => wdFormatDocume +nt } ); $doc->Close; undef $doc; } $word->Close; undef $word;

cheers

tachyon

Replies are listed 'Best First'.
Re^2: Microsoft Works
by straywalrus (Friar) on Oct 06, 2004 at 04:03 UTC
    The problem with this is that Word fscks the foot notes from Works, and being that these are all philosophical texts with many footnotes, it is pointless to loose these. It seems I'll have to find something of a spec of the actual format of Works to proceed with this... -- sae