2017-06-28 1 views
4

Mes recherches ont seulement conduit à quelque chose de similaire dans VBA, mais j'ai une approche différente et dans PowerShell pour ce problème.Lecture des commentaires à partir du fichier Excel avec PowerShell

Je suis nouveau sur PowerShell et je veux lire tous les commentaires dans des fichiers Excel et les enregistrer dans un fichier CSV. Tout fonctionne sauf pour lire le commentaire. Le commentaire est un objet com. Comment puis-je obtenir le commentaire réel de l'objet com? Voici un extrait du code pertinent. Je ne suis pas capable de le faire avec invokemember mais peut-être que je le fais mal. Merci d'avance.

ForEach ($File in (Get-ChildItem $folder -Include *.xls, *.xlsx, *.xlsm -Recurse)) 
{ 
    $sh=$document.Sheets.Item($i) 
    $comments = $sh.comments 
    foreach ($comment in $comments) 
    { 
     #[System.__ComObject] <--- Must get this value | Add-Content -file.csv 
    } 
} 

Je suis également ouvert à d'autres méthodes pour y parvenir.

Répondre

1

Chaque Comment Object a un Text method qui retourne ou met à jour les informations.

Je pris un peu plus loin et divisée sur la nouvelle ligne afin que vous puissiez séparer le commentaire de l'auteur:

foreach ($comment in $comments) { 
    $CommentText = $comment.text().split([environment]::newline) 
    [pscustomobject]@{ 
     'Author' = $CommentText[0] 
     'Text' = $CommentText[1] 
    } 
} 
+0

Merci, mais $ comment.Text() provoque cette erreur: invocation de la méthode a échoué parce que [Syste m .__ ComObject] ne contient pas de méthode nommée 'texte'. – Rhamnetin

0

Je suis sûr qu'il ya un bateau plein de moyens pour y parvenir ...

import-module psexcel 
$fred = new-object OfficeOpenXml.ExcelPackage -ArgumentList "C:\Users\mccarthyd\Documents\Book1.xlsx" 

foreach ($worksheet in $fred.Workbook.Worksheets) { 
    $worksheet.comments 
} 

voir ce post: powershell excel access without installing Excel