Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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
            => $ole_const->{'wdStatisticWords'},
            => $ole_const->{'msoTrue'},
    printf "%-25s %6u\n", $file, $word_count;


exit 0;
Comment on Get word count from Word document via OLE
Download Code

Back to Snippets Section

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://614609]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (7)
As of 2015-12-01 23:29 GMT
Find Nodes?
    Voting Booth?

    My keyboard shows this many letters:

    Results (29 votes), past polls