Question Récupérer les statistiques d'un document Word

Plus d'informations
il y a 18 ans 7 mois #822 par Jacques Barathon
Hello,

Je viens de publier sur mon blog janel.spaces.live.com un script qui permet de récupérer les statistiques d'un ou plusieurs documents Word (nombre de pages, de lignes, de mots, etc).

Le script s'appelle measure-document. La dernière version (en date) est celle publiée sur mon billet daté du 6 août. Vous aurez peut-être besoin de remonter dans les deux billets précédents pour avoir un peu plus d'infos sur l'interaction entre PowerShell et Word, notamment pour l'installation des PIA (Primary Interop Assemblies) nécessaires à un pilotage avancé des applications Office.

Quoi qu'il en soit, voici le script dans sa dernière version. Libre à vous de l'archiver sur ce site et de l'utiliser voire de le modifier comme bon vous semble:

[code:1]# measure-document.ps1
#
# Fournit des statistiques sur le(s) document(s) passé(s) par le pipeline:
#
# - Characters = Nombre de caractères dans le document (hors 'espace')
# - Lines = Nombre de lignes dans le document
# - Name = Nom du document
# - Pages = Nombre de pages dans le document
# - Paragraphs = Nombre de paragraphes dans le document
# - Path = Chemin du document
# - Size = Taille du document (en octets)
# - Spaces = Nombre de caractères 'espace' dans le document
# - Words = Nombre de mots dans le document
#
# Usage:
#
# dir *.doc | measure-document
#

# section exécutée avant le traitement du premier document:
begin
{
# ouverture de l'application:
$wordapp = new-object -com word.application

# création de la variable à utiliser pour les paramètres optionnels laissés vides:
$m = [system.type]::missing
}

# section exécutée pour chaque document:
process
{
# ouverture du document dans Word:
$doc = $wordapp.documents.open($_.fullname,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m)

# récupération des statistiques:
$characters = $doc.ComputeStatistics(\"WdStatisticCharacters\"«»)
$lines = $doc.ComputeStatistics(\"WdStatisticLines\"«»)
$name = $doc.name
$pages = $doc.ComputeStatistics(\"WdStatisticPages\"«»)
$paragraphs = $doc.ComputeStatistics(\"WdStatisticParagraphs\"«»)
$path = $doc.path
$size = $_.length
$spaces = $doc.ComputeStatistics(\"WdStatisticCharactersWithSpaces\"«») - $characters
$words = $doc.ComputeStatistics(\"WdStatisticWords\"«»)

# fermeture du document:
$doc.close()

# construction de l'objet qui contiendra tous les résultats:
$result = new-object PSObject

# ajout des résultats:
$result | add-member NoteProperty Characters $characters
$result | add-member NoteProperty Lines $lines
$result | add-member NoteProperty Name $name
$result | add-member NoteProperty Pages $pages
$result | add-member NoteProperty Paragraphs $paragraphs
$result | add-member NoteProperty Path $path
$result | add-member NoteProperty Size $size
$result | add-member NoteProperty Spaces $spaces
$result | add-member NoteProperty Words $words

# affichage des résultats:
$result
}

# section exécutée après le traitement du dernier document:
end
{
# fermeture de l'application:
$wordapp.quit()
$wordapp = $null
}[/code:1]
Et voici quelques exemples d'usage:

[code:1]# Sur un document:

PS> dir usb_boot.doc | measure-document

Characters : 14853
Lines : 296
Name : usb_boot.doc
Pages : 8
Paragraphs : 127
Path : C:\Users\janel\Documents\Private\test\doc
Size : 75264
Spaces : 2633
Words : 2721

# Sur tous les documents Word d'un répertoire:

PS> dir *.doc* | measure-document | measure-object lines,pages -sum -average -min -max | ft -a

Count Average Sum Maximum Minimum Property

---


5 666,4 3332 1761 3 Lines
5 19 95 49 1 Pages
[/code:1]
Amusez-vous bien!

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 18 ans 7 mois #823 par Arnaud Petitjean
Superbe script Janel !!! :woohoo:

Merci beaucoup.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 18 ans 7 mois #830 par Robin Lemesle
Salut Janel !

C'est maintenant sans surprise que l'on accueille tes scripts de grande qualité.

Cependant, j'aurai une petite remarque (du chipotage) :
Lors de l'ouverture d'un document avec la méthode open, ne vaudrait-il pas mieux spécifer l'argument readonly à la valeur true ? de façon à ne pas bloquer l'exécution du script si le document est ouvert.
[code:1]$doc = $wordapp.documents.open($_.fullname,$m,$true,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m) [/code:1]


Encore une fois, Merci Janel :)


Rob

Robin MVP PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 18 ans 6 mois #856 par Jacques Barathon
Très juste Robin, merci pour la remarque! Du chipotage comme ça, j'en veux bien tous les jours. :)

Janel

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena