Beefy Boxes and Bandwidth Generously Provided by pair Networks BBQ
Think about Loose Coupling
 
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 having an uproarious good time at the Monastery: (13)
As of 2014-04-17 11:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (446 votes), past polls