Page 1 sur 1
[R] Manipulation des propriétés d'un fichier
Posté : mer. 27 mai 2015 16:11
par Patrick22
Bonjour,
Impossible de faire une recherche sur ces termes car ils sont trop génériques aussi je pose la question : Est-il possible de manipuler, c-à-d de lire et d'écrire, les propriétés d'un fichier ?
Chaque fichier Windows possède des propriétés dont les dates de création, mise à jour etc.. Ces dates sont manipulables. Jusque là tout va bien.
Il y a aussi des propriétés différentes selon les fichiers mais on retrouve toujours les dates et très souvent aussi un onglet "Résumé" - peut-être tout le temps, je ne sais pas - qui contient des champs tels que "Titre", "Objet", "Auteur", "Catégorie", "Mots-clé" et "Commentaires".
J'aimerais écrire dans ce champ "Commentaires" un commentaire sur la version du fichier lorsque je le sauvegarde.
Comme il s'agit d'un fichier Excel, il doit être possible de le faire en utilisant les objets Excel mais j'aimerais savoir si AutoIt permet une écriture de ce commentaire directement, comme il le permet avec les dates, afin de généraliser le processus.
Quelqu'un a-t-il des informations à ce sujet ?
Re: [..] Manipulation des propriétés d'un fichier
Posté : mer. 27 mai 2015 18:11
par orax
Sur XP il avait toujours cet onglet "Résumé" sur tous les fichiers, mais sur mon Windows 8 il n'est plus présent. Ce qui était écrit dans cet onglet était stocké dans les ADS (Alternate data streams) (dans
SummaryInformation). Le problème est que ces données ne sont pas stockées dans le fichier en lui même mais au niveau du système de fichiers (NTFS en l'occurrence). D'ailleurs, en fonction des logiciels de sauvegardes, ces ADS ne sont pas forcément sauvegardés. En ce qui me concerne je préfère ne pas les sauvegarder.
Par contre, pour modifier les propriétés d'un fichier Excel (sans passer par les ADS) — afin que celles-ci soient visibles dans l'onglet "Détails" et dans Excel, je pense qu'il faut utiliser un objet Excel (ObjCreate), à moins que...
Dsofile.dll vous permet de modifier les propriétés d'un document Office sans Office (ça peut marcher en VB6 donc ça devrait marcher en AutoIt). Mais si le script sera toujours exécuté sur un poste où Office est installé, la DLL présente peu d'intérêt.
Re: [..] Manipulation des propriétés d'un fichier
Posté : mer. 27 mai 2015 21:24
par Patrick22
D'accord, je vois.
Jusqu'à présent, j'ai toujours évité d'utiliser ces propriétés parce que trop fragile à pérenniser, dans les sauvegardes, les versions de windows, etc.
Là, comme je sauvegarde à la volée dans un dossier les évolutions d'un script, j'ai voulu y ajouter un commentaire pour les distinguer plus facilement.
Tant pis, c'est windows ! On fait avec.
J'ai chercher aussi du coté de ShellExecute avec le verbe "properties" pour ouvrir les propriétés du fichier mais ça ne marche pas non plus. Il faut que "properties" soit déjà défini dans la base de registre pour le fichier traité. Tu parles d'une affaire ! Je ne sais même pas ce qu'il faudrait mettre dans la commande associée pour ouvrir les propriétés du fichier.
On peut le faire aussi en vbs, j'ai fait le script (une dizaine de lignes) mais après il faut l'utiliser depuis AutoIt ou peut-être l'adapter, je ne connais pas assez les subtilité d'AutoIt.
Je laisse tomber. Je voulais juste ajouter un petit plus à mon script de sauvegarde mais pas faire un nouveau développement. Je suis déjà sur un truc compliqué.
Merci pour les infos.
Edit :
Finalement, j'ai craqué. J'ai complété mon script AutoIT par un appel à un script VBS qui utilise DSOFile comme conseillé. C'est nickel. Comme c'est pour un usage personnel, le fait qu'il soit en VBS ne me gène pas trop.
Re: [R] Manipulation des propriétés d'un fichier
Posté : mer. 27 mai 2015 22:06
par jguinch
Pourquoi utiliser un code VBScript alors qu'on peut le faire avec AutoIt ?
► Afficher le texte
Code : Tout sélectionner
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
$objFile.Open("C:\Scripts\New_users.xls")
$objFile.SummaryProperties.Title = "New title added via a script"
$objFile.Save
Il ressemble à quoi ton code VBScript ?
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 11:06
par Patrick22
Parfait jguinch.
Mon script VBS a les mêmes lignes de codes, à la gestion des arguments prêt.
Code : Tout sélectionner
Set args = WScript.Arguments
If args.count <> 1 Then WScript.Quit
sFichier = args(0)
Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open(sFichier)
sCommentaire = InputBox("Commentaires pour cette version :" _
, "Copier dans anciennes versions." _
, objFile.SummaryProperties.Comments)
objFile.SummaryProperties.Comments = sCommentaire
objFile.Save
Directement depuis AutoIt, c'est nettement mieux. Plus besoin de gérer l'écriture du script VBS depuis AutoIt s'il n'existe pas. Et un seul script au total. C'est ce que je cherchais.
Merci à vous : DSOFile + Dans AutoIt
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 13:48
par TomAijerrie
Moi je rencontre un problème :
Code : Tout sélectionner
[color=#FF0000]"F:\ \Brouillon\dosFile\msdn.au3" (38) : ==> Variable must be of type "Object".:[/color]
$objFile.Open("F:\Nos documents\raccourcis.xlsx")
$objFile^ ERROR
Je suis sous Windows 7
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 18:33
par walkson
Bonjour,
Même problème que TomAijerrie. Il semble que la Dll ne soit plus installée depuis Office 2007 (à confirmer ?...). Je pense que jguinch est sous Office 2003 (?)
Aprés une rapide recherche:
https://support.microsoft.com/fr-fr/kb/224351/fr pour la Dll
Mais de mémoire, je sais qu'avec vba excel on peut écrire les propriétés du document.
Une rapide tentative sous vba excel me donne ceci:
► Afficher le texte
Code : Tout sélectionner
Sub Macro1()
'
' Macro1 Macro
'
ActiveWorkbook.BuiltinDocumentProperties(1) = "titre"
ActiveWorkbook.BuiltinDocumentProperties(2) = "objet"
ActiveWorkbook.BuiltinDocumentProperties(3) = "auteur"
ActiveWorkbook.BuiltinDocumentProperties(4) = "motclef"
ActiveWorkbook.BuiltinDocumentProperties(7) = "dernierauteur"
ActiveWorkbook.BuiltinDocumentProperties(6) = "modele"
ActiveWorkbook.BuiltinDocumentProperties(5) = "comment"
ActiveWorkbook.BuiltinDocumentProperties(8) = "0" 'nbrevision
ActiveWorkbook.BuiltinDocumentProperties(9) = "Nom d'application"
ActiveWorkbook.BuiltinDocumentProperties(9) = "01/01/2015" 'date revis
ActiveWorkbook.BuiltinDocumentProperties(18) = "categorie"
ActiveWorkbook.BuiltinDocumentProperties(19) = "format"
ActiveWorkbook.BuiltinDocumentProperties(20) = "responsable"
ActiveWorkbook.BuiltinDocumentProperties(21) = "Société "
rw = 1
Worksheets(1).Activate
For Each p In ActiveWorkbook.BuiltinDocumentProperties
Cells(rw, 1).Value = p.Name
rw = rw + 1
Next
rw = 1
Worksheets(1).Activate
For Each p In ActiveWorkbook.CustomDocumentProperties
Cells(rw, 3).Value = p.Name
Cells(rw, 4).Value = p.Value
rw = rw + 1
Next
With ActiveWorkbook.CustomDocumentProperties
'.Add Name:="CustomNumber", _
LinkToContent:=False, _
Type:=msoPropertyTypeNumber, _
Value:=1000
'.Add Name:="CustomString", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:="This is a custom property."
'.Add Name:="CustomDate", _
LinkToContent:=False, _
Type:=msoPropertyTypeDate, _
Value:=Date
End With
'
End Sub
Pas eu le courage de le traduire en Autoit....
Petite remarque, j'ai commenté certaines lignes qui sont les propriétés personnalisées et qui ne peuvent être reproduite à l'identique (en décommentant, marche la première fois et bug la deuxième, logique!)
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 18:43
par Patrick22
As-tu codé cette ligne avant, pour créer l'objet :
Il faut aussi installer la DLL de DSOFile :
https://technet.microsoft.com/library/ee692828.aspx
https://www.microsoft.com/en-us/downloa ... px?id=8422
Ceci dit, je crois bien que cela ne marchera pas avec Windows 7.
Le dernier lien au-dessus, celui du téléchargement dit ceci dans la rubrique "System Requirements" :
Supported Operating System
Windows 2000, Windows Vista, Windows XP
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 18:52
par walkson
Oui, j'ai créé l'objet sans résultat
Dans le doute, j'ai fait une recherche de la Dll sur mon PC, sans résultat.
Après, installer une Dll pour obtenir la même chose que le code Vba excel, bof !...
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 19:14
par orax
J'ai Excel 2010 et je n'ai pas dû installer de DLL. J'ai testé le code suivant avec 2 versions de fichiers Excel. Le code fonctionne si le fichier est au format Excel 97 - 2003. Lorsqu'il est au format 2010, il n'y a pas d'erreur mais la "MsgBox" est vide.
Code : Tout sélectionner
$objFile = ObjCreate("DSOFile.OleDocumentProperties")
;~ $objFile.Open(@ScriptDir & "\test.xlsx") ; format Excel 2010 (non fonctionnel)
$objFile.Open(@ScriptDir & "\Classeur1.xls") ; format Excel 97 - 2003 (fonctionnel)
MsgBox(0,'',$objFile.SummaryProperties.Author & @CRLF)
MsgBox(0,'',$objFile.SummaryProperties.Keywords & @CRLF)
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 21:11
par jguinch
Perso je n'ai pas testé, mais il semblerait que ce soit possible pour les fichiers Office 2007 (donc 2010 normalement) d'après ce lien :
https://www.microsoft.com/en-us/downloa ... px?id=8422. Voir la section détails qui mentionne
This will allow users that have the Office 2007 Compatibility Pack to read/write document properties for Office 2007 files without actually having Office 2007 installed. Donc peut-être faudrait-il installer le pack de compatibilité 2007 pour Office 2003 ? Mais là je suis pas trop sûr, car si on n'a pas Office 2003 installé, je sais si on pourra l'installer... A tester
Re: [R] Manipulation des propriétés d'un fichier
Posté : jeu. 28 mai 2015 22:57
par jchd
Si on sort du cadre Excel, ne serait-on pas proche de ce qu'offre un logiciel de gestion de versions, type svn et consort, rien qu'en en n'utilisant seulement quelques aspects ?
Re: [R] Manipulation des propriétés d'un fichier
Posté : ven. 29 mai 2015 10:24
par Patrick22
Réponses aux questions sur l'intérêt de la démarche :
Je travaille avec Excel dans un dossier.
Dans ce dossier, je place aussi mon script au3 compilé.
Lorsque, en cours de travail, j'ai envie de garder une version de mon travail, je fais glisser le classeur sur le script au3.
Celui le copie dans un sous-dossier "Anciennes versions", créé s'il n'existe pas, avec date et heure dans le nom du classeur, voire seconde s'il y a doublon, et, maintenant la possibilité de saisir un commentaire.
- - Pas de gestion de bases SQL et autres.
- Pas d'installation de logiciel de versionning.
- Intégrité du classeur Excel : seul son nom est complété.
- Indépendance complète des divers environnements de version puisqu'ils sont simplement liée au dossier de travail et aux scripts de ce dossier.
- Possibilité d'utiliser le même système avec d'autres types de fichiers.
Bon, c'est loin d'être une révolution, même pas une évolution, mais c'est bien pratique de pouvoir sauvegarder des versions quand on en a envie, sans rien polluer ni rien à gérer, hormis parfois un nettoyage en fin de développement.
Re: [R] Manipulation des propriétés d'un fichier
Posté : ven. 29 mai 2015 12:31
par TomAijerrie
Si on sort du cadre Excel,
comment faire pour changer les métadonnées d'un fichier (Microsoft office ou non) ?
Re: [R] Manipulation des propriétés d'un fichier
Posté : ven. 29 mai 2015 14:37
par Patrick22
Je viens d'essayer avec des fichiers au3, txt, bat, vbs, ppf, zip, bmp.
Ça fonctionne pour tous ceux dont le résumé est disponible dans les propriétés, c'est-à-dire : au3, txt, bat, vbs et ppf.
Les fichiers zip et bmp ont la zone commentaire grisé dans leurs propriétés et il n'est pas possible d'écrire dedans.
Il semble donc que la solution avec DSOFile fonctionne pour tous les types de fichiers du moment que les commentaires de leurs propriétés soient accessibles.
Bonne nouvelle : Il est possible aussi de l'utiliser lors de développements en AutoIt, en batch, en VBS, etc.