[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.
Avatar de l’utilisateur
Papayes
Membre fOOndateur
Membre fOOndateur
Messages : 4154
Inscription : 07 déc. 2005 14:55
Localisation : Vic-Fezensac dans le Gers

[Writer] Renommer un fichier selon sélection

Message par Papayes »

Bonjour,

Voici un fichier comprenant la macro originale d’alhazred

Code : Tout sélectionner

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

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é 353 fois
Cordialement,
"Tout ce qui n'est pas donné est perdu"
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message par Dude »

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
Papayes
Membre fOOndateur
Membre fOOndateur
Messages : 4154
Inscription : 07 déc. 2005 14:55
Localisation : Vic-Fezensac dans le Gers

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

Message par Papayes »

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

 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

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é 373 fois
Cordialement,
"Tout ce qui n'est pas donné est perdu"
Répondre