FR/Documentation/BASIC Guide/Saving a document

From Apache OpenOffice Wiki
Jump to: navigation, search

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