[Writer] Renommer un fichier selon sélection

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Writer] Renommer un fichier selon sélection

Messagepar Papayes » 07 Nov 2014 07:29

Bonjour,

Voici un fichier comprenant la macro originale d’alhazred

Code : Tout sélectionner   AgrandirRéduire
REM ***** BASIC *****

Sub EnregistrerSousSelection()
   Dim doc As Object, sel As Object, url As String, props()
   
   doc = ThisComponent
   sel = doc.currentSelection(0)
   If Not sel. SupportsService("com.sun.star.text. TextRange") Then Exit Sub
   
   'Indiquer ici le répertoire d’enregistrement
   'On peut améliorer (même répertoire que le fichier original ou/et choix)
   'et gérer les erreurs (sélection contenant un caractère interdit)
   url = ConvertToUrl("C :\" & sel. String & ".odt")
   doc. StoreAsUrl(url, props())
End Sub


dont je m’étais servi comme exemple
dans le tutoriel Importer une macro d’un fichier exemple ; lanceurs
avec l’ancien fichier :[Writer]Renommer un document par le texte sélectionné


Afin de l’adapter à tous les systèmes Linux ou OS X, sans obliger les différents utilisateurs à passer par la modification
de la ligne url = ConvertToUrl("C :\" & sel. String & ".odt") valable pour WIN
ou /Users/Nomdel'utilisateur/Desktop/ pour OsX, etc.

les Voolontaires du Forum, Joel275, luky-luke, Piaf et Alain de La Chaume
ont apporté les modifications suggérées par alhazred.

Caractères autorisés en plus de l'alphabet classique (capitales et bas-de-casse) et des chiffres de 0 à 9 : âäàêëéèîïôöûüùç_-

Qu’ils soient tous vivement remerciés pour leur participation active.

Code : Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****
option explicit

'———————————————————————————————————————————————————— v 2 du 7/11/2014
' Reprise et assemblage d'une partie des codes fournis
' par alhazred, joel275, Piaf, luky-luke...
'—————————————————————————————————————————————————————————————————————
sub enregistrerSelonSelection()
dim oDoc as object, oSelect as object, oSrv as object
dim urlRep as string, nomFic as string
dim t(), i as integer
dim carsOK as string, buf1 as string, buf2 as string, c as string
dim jdFilePicker as Object, jdFilePickerType(0) as Integer, MesFichiers() as String
   
   oDoc = thisComponent
   oSelect = oDoc.currentSelection(0)
   if oSelect.string = "" then
      msgBox "Effectuer d'abord une sélection !", 16, _
         "Enregistrer doc selon selection     "
      exit sub
   end if

   ' Chemin du dossier du document actif
   t = split(oDoc.url, "/")
   if uBound(t) > 0 then
      i = uBound(t) -1
      redim preserve t(i)
      urlRep = join(t(), "/") & "/"
   else   '  7/11/2014 : cas d'un doc non enregistré
      oSrv = createUnoService("com.sun.star.util.PathSettings")
      t = split(oSrv.Work,";")
      urlRep = t(0)
      if len(urlRep) then urlRep = urlRep & "/"      
   end if

   ' Dans le nom du fichier (sélection courante)
   ' - remplacer chaque espace par un tiret bas
   buf1 = join( split(oSelect.string, " "), "_")
   
   ' - filtrer les caractères indésirables
   carsOK = "abcdefghijklmnopqrstuvwxyz0123456789"
   carsOK = carsOK & "_-âäàêëéèîïôöûüùç"   
   carsOK = carsOK & "œ§&£+$"
   for i = 1 to len(buf1)
      c = mid(buf1, i, 1)
      if instr( carsOK, lcase(c) ) > 0  then nomFic = nomFic & c
   next i
   
   ' Dialogue enregistrer sous... avec chemin et nom par défaut
   jdFilePicker = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
'   jdFilePicker = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
   jdFilePickerType(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
   jdFilePicker.initialize(jdFilePickerType())
   jdFilePicker.DisplayDirectory = urlRep
   jdFilePicker.Title = "Choisissez le répertoire d'enregistrement"       
   jdFilePicker.DefaultName = nomFic
   jdFilePicker.AppendFilter("Documents ODF", "*.odt;*.ods")
   jdFilePicker.CurrentFilter = "Documents ODF"
   If jdFilePicker.Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      MesFichiers() = jdFilePicker.Files
      ThisComponent.StoreAsUrl(MesFichiers(0), Array())
   End If
   
   jdFilePicker.Dispose()
end sub


Renommer selon sélection_v2.odt
(25 Kio) Téléchargé 129 fois

Cordialement,
"Tout ce qui n'est pas donné est perdu"
Avatar de l’utilisateur
Papayes
Membre fOOndateur
Membre fOOndateur
 
Message(s) : 4154
Inscrit le : 07 Déc 2005 14:55
Localisation : Vic-Fezensac dans le Gers

Re: [Writer] Renommer un fichier selon sélection

Messagepar Dude » 07 Nov 2014 09:10

J'en profite pour rappeler qu'il existe la demande d'amélioration 14077 (11 voix à ce jour).
Il s'agit d'avoir une option permettant d'avoir la première ligne du texte comme nom de fichier à l'enregistrement.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20591
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer] Renommer un fichier selon sélection

Messagepar Papayes » 20 Nov 2014 09:10

Bonjour,

La version Renommer selon sélection_v2.odt correspond à un usage sous Unix : comme Mac OsX ou Linux : Ubuntu, Suse, etc. où l'extension n'est pas nécessaire pour que le programme reconnaisse un de ses fichiers, contrairement à MSWindows.
Code : Tout sélectionner   AgrandirRéduire
jdFilePickerType(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE

La boite de dialogue d'enregistrement proposée "Choisissez le répertoire d’enregistrement" sans case à cocher Extension automatique du nom de fichier ni la case Enregistrer avec mot de passe.

    WIN_Avec_et_sans_extension.png
Pour retrouver la Boite de dialogue classique "Enregistrer sous" avec les cases à cocher
Extension automatique du nom de fichier et Enregistrer avec mot de passe, il convient de modifier la ligne précédente par
Code : Tout sélectionner   AgrandirRéduire
jdFilePickerType(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION_PASSWORD


Subtilité de jdFilePickerType(0) indiquée par luky-luke. :super:

Voici le fichier
Renommer selon sélection_v3.odt
(33.32 Kio) Téléchargé 134 fois


Cordialement,
"Tout ce qui n'est pas donné est perdu"
Avatar de l’utilisateur
Papayes
Membre fOOndateur
Membre fOOndateur
 
Message(s) : 4154
Inscrit le : 07 Déc 2005 14:55
Localisation : Vic-Fezensac dans le Gers


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)