Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
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;
Comment on Get word count from Word document via OLE
Download Code

Back to Snippets Section

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 web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (13)
As of 2014-08-21 21:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (143 votes), past polls