2012-07-19 6 views
2

J'essaie d'écrire un script PowerShell pour effectuer des étapes sur plusieurs documents Word. J'ai Word 2010 installé sur ma machine, mais je n'arrive pas à obtenir le script pour ouvrir les documents. Voici le scriptPowerShell - Traiter plusieurs documents Word (Office 2010)

$path = "C:\MyPath" 
    Add-Type -AssemblyName Microsoft.Office.Interop.Word 
    $wordFiles = Get-ChildItem -Path $path -include *.doc, *.docx -recurse 
    $objWord = New-Object -ComObject "word.application" 
    $objWord.visible = $false 
    foreach($wd in $wordFiles) 
    { 
    $doc = $objWord.documents.open($wd.fullname) 
    #InsertProcessingFunctionsHere 
    $doc.Save() 
    $objWord.Documents.Close() 
    } 
    $objWord.Quit() 

J'essaie et exécuter cette commande, et l'erreur que je reviens de PowerShell est:

Exception calling "Open" with "1" argument(s): "Command failed" 
    At C:\Scripts\Process-WordDocs.ps1:10 char:31 
    + $doc = $objWord.documents.open <<<< ($wd.fullname) 
     + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
     + FullyQualifiedErrorId : ComMethodTargetInvocation 

    You cannot call a method on a null-valued expression. 
    At C:\Scripts\Process-WordDocs.ps1:13 char:10 
    + $doc.Save <<<<() 
     + CategoryInfo   : InvalidOperation: (Save:String) [], RuntimeException 
     + FullyQualifiedErrorId : InvokeMethodOnNull 

    Exception calling "Close" with "0" argument(s): "This method or property is not available because a document window is not active." 
    At C:\Scripts\Process-WordDocs.ps1:14 char:25 
    + $objWord.Documents.Close <<<<() 
     + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
     + FullyQualifiedErrorId : ComMethodTargetInvocation 

états MSDN Documents.Open exige seulement 1 argument, et le reste sont en option . Cependant, un exemple C# que j'ai vu sur le net, a montré passer un paramètre "ReadOnly: False" à documents.open. En passant par le script dans le débogueur ISE, je peux voir $ wd.fullname est là et pointe vers un fichier valide, donc je ne comprends pas pourquoi il ne s'ouvre pas. Au début, je pensais que c'était parce que j'utilisais une version 64 bits du système d'exploitation (version 32 bits d'Office), mais que tenter le script à partir d'une session PowerShell 32 bits entraînait la même erreur. Quelqu'un a-t-il une idée de la raison pour laquelle cela peut se produire et comment je peux y remédier? Je préférerais que tout le traitement soit invisible pour l'utilisateur. Toute aide serait considérablement apprécié. Merci d'avance pour votre temps.

+0

La chose étrange teste ceci sur une machine 64 bits qui avait Office 2007 installé, le script fonctionne. Donc, il semble que ce soit quelque chose de spécifique à 2010. J'espère que quelqu'un d'autre a couru là-dedans. – user1389971

Répondre

3

Je pense que vous voulez fermer le document à l'aide $doc.close() au lieu de $objWord.Documents.Close()

Questions connexes