Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Get word count from Word document via OLE

by polypompholyx (Chaplain)
on May 10, 2007 at 12:17 UTC ( #614609=snippet: print w/replies, xml ) Need Help??
Description: The most obvious solution to this ($doc->Words->{'Count'}) doesn't actually do what you want, because it uses a different defintion of 'word' from that used by the word-count dialogue box. This version returns the same number as reported by Word 2003.
use strict;
use warnings;

use Cwd qw( abs_path );

use Win32::OLE;
use Win32::OLE::Const;
my $ole_const =
{ 
    %{ Win32::OLE::Const->Load
        ('Microsoft Word 11.0 Object Library') }, 
    %{ Win32::OLE::Const->Load
        ('Microsoft Office 11.0 Object Library') }, 
};

my @files = ( shift @ARGV ) || glob( "*.doc" );

my $word = Win32::OLE->new( 'Word.Application', 'Quit' )
    or die "Can't start Word: "
        . Win32::OLE->LastError . "\n";

for my $file ( @files )
{
    my $fully_qualified_file = abs_path( $file );
    my $doc = $word->Documents->Open( $fully_qualified_file )
        or die "Can't open document '$fully_qualified_file': " 
            . Win32::OLE->LastError . "\n";
    my $word_count = $doc->ComputeStatistics
    ({
        Statistic
            => $ole_const->{'wdStatisticWords'},
        IncludeFootnotesAndEndnotes
            => $ole_const->{'msoTrue'},
    });
    
    $doc->Close();
    printf "%-25s %6u\n", $file, $word_count;
}

$word->Quit();

exit 0;
Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://614609]
help
Chatterbox?
and the radiator hisses contentedly...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2016-12-03 08:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:













    Results (52 votes). Check out past polls.