FR/Documentation/BASIC Guide/Saving a document

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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
Personal tools