FR/Documentation/BASIC Guide/Saving a document
Généralité
Enregistrer un document existant :
thisComponent.store()
Mais cette approche est réellement simpliste. Aussi une approche plus générique pourrait être :
function fnSauve(oDoc) if oDoc.hasLocation AND Not oDoc.isReadOnly Then fnSave = true on local error goto pasSauve oDoc.store() on error goto 0 else fnSauve = fnDispatch("SaveAs") end If exit function pasSauve: fnSauve = false end function
fnDispatch est défini dans The OpenOffice.org recorder and UNO dispatch calls.
Pour faire un "Enregistrer sous" :
sub subSaveAs(oDoc, sFile, optional sType) sURL = convertToURL(sFile) if isMissing(sType) then oDoc.storeAsURL(sURL, array()) else dim mFileType(0) mFileType(0) = createUnoStruct("com.sun.star.beans.PropertyValue") mFileType(0).Name = "FilterName" mFileType(0).Value = sType oDoc.storeAsURL(sURL, mFileType()) end if end sub
Attention : il y a un bogue dans la documentation de l'API (voir le rapport 121665). Sauf si la propriété "Overwrite" est mise à FALSE dans le MediaDescriptor, tout fichier existant du même nom est écrasé sans notification d'erreur. Ce qui n'est sans doute pas souhaitable. Cela a seulement été testé avec la version 3.4.1 sous MS Windows mais d'autres versions et systèmes d'exploitation peuvent être impactés.
Pour faire un "Export vers" (ne touche pas à l'URL du document courant mais enregistre une nouvelle copie dans un format spécifique) :
sub subExportAs(oDoc, sFile, optional sType) sURL = convertToURL(sFile) if isMissing(sType) then oDoc.storeToURL(sURL, array()) else dim mFileType(0) mFileType(0) = createUnoStruct("com.sun.star.beans.PropertyValue") mFileType(0).Name = "FilterName" mFileType(0).Value = sType oDoc.storeToURL(sURL, mFileType()) end if end sub
Exemples d'appel de ces routines :
subSaveAs(thisComponent, "C:\tmp\NewName.odt") 'exemple sous Windows subExportAs(thisComponent, "/home/ian/Example.txt", "Text") 'sous Linux
Types de fichier
Le script ci-dessous permet de créer un nouveau document et d'y afficher la liste des filtres existants :
Sub Main oFF = createUnoService( "com.sun.star.document.FilterFactory" ) oFilterNames = oFF.getElementNames() ' Create a Writer doc and save the filter names to it. oDoc = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() ) oText = oDoc.getText() oCursor = oText.createTextCursor() oCursor.gotoEnd( False ) ' Print the filter names into a Writer document. For i = LBound( oFilterNames ) To UBound( oFilterNames ) oText.insertString( oCursor, oFilterNames(i), False ) oText.insertControlCharacter( oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False ) Next End Sub