Sauvegarde fichier

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aimerai pouvoir sauvegarder un document au format Word dans un script perl.
Cependant je me retrouve face à cette erreur :

Bareword "wdFormatDocument" not allowed while "strict subs" in use at C:\doc.pl line 59.
Execution of C:\doc.pl aborted due to compilation errors.


Voici mon code :

my $word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application','Quit') or die Win32::OLE->LastError();
			my $document = $word->Documents->Open("$Path/$FileFound") or die Win32::OLE->LastError();
			# $word->PageSetup->{Orientation} = wdOrientLandscape;
			$word->ActiveDocument->SaveAs(FileName => "$Path/bis$FileFound", FileFormat => wdFormatDocument);


Par avance merci.

3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut remousse,

    Tu cherches visiblement à passer un hash à SaveAs.

    Essaye donc en ajoutant des accolades, ainsi :

    $word->ActiveDocument->SaveAs( { FileName => "$Path/bis$FileFound", FileFormat => wdFormatDocument } );

    Dal
    0
  2. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    Même problème avec les accolades.
    J'ai essayé de passer wdFormatDocument avec son équivalent numérique, à savoir 0 et cela fonctionne parfaitement.

    Merci de ton aide.
    0
  3. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    Cependant j'ai un nouveau problème.
    J'ai plusieurs fichier word que je dois manipuler et lorsque je les ouvre à la main on me demande le format de conversion, qui dans mon cas est MS-DOS.

    Or je ne trouve pas cette option en Perl. Existe-t-elle ?

    Merci.
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Win32::OLE est juste un module CPAN permettant d'accéder à l'interface OLE.

      Quant à savoir comment on pilote chaque application Windows disposant d'une telle interface, il faut se référer à la documentation de l'application en question, et à la bonne version.

      Dans ton cas, cela devrait se trouver là dedans, du moins pour MS Word issu d'Office 2013 :

      https://docs.microsoft.com/en-us/office/vba/api/Word.WdSaveFormat

      wdFormatDOSText           4 Microsoft DOS text format.
      
      wdFormatDOSTextLineBreaks 5 Microsoft DOS text with line breaks preserved.
      


      Dal
      0
    2. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
       
      Merci beaucoup, c'est justement ce genre d'information qu'il me fallait.
      En plus c'est beaucoup plus simple que de passer par le module VB de word !
      0