Seite 1 von 1

Dialog 'speichern unter' mit ausgewähltem dateityp

Verfasst: So, 07.11.2010 13:07
von lto
hallo,

ich arbeite gerade an einem makro, welches über einen button im writer-dokument aufgerufen wird.
bei klick sollte aus einer tabellenzelle der inhalt genommen werden und als dateiname im "speichern unter"-dialog eingetragen werden (funktioniert)
als weiteres lege ich den dateityp fest. hier wird ein eigenes format verwendet, welches als xml-filter eingerichtet ist (name: "drei" funktioniert auch [wenn manuell angewendet])

das problem ist, dass zwar alles eingestellt wird, jedoch wird die datei immer als openoffice-dokument abgespeichert und nicht der xml-filter angewendet und eine xml-datei erstellt

ich habe schon diverse versuche unternommen, jedoch ist bis jetzt keine erfolgreich gewesen.
danke im vorhinein für eure hilfe. lg

folgend der code:

Code: Alles auswählen

Sub Save_As_XML() 
	Dim Doc As Object
	Dim TextTables As Object
	Dim Table As Object
	Dim CellName

 'Getting Title of charter
	Doc = ThisComponent
	TextTables = Doc.getTextTables().getbyName("title")
   Table = TextTables()
   CellName = Table.getCellbyName("A1")
   Cellvalue = CellName.getString()
 
 	'Starting FilePicker
   sFilePickerArgs = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE ) 
   oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" ) 
   With oFilePicker 
      sDirectory = oFilePicker.getDisplayDirectory 
      .Initialize ( sFilePickerArgs() ) 
      .SetDisplayDirectory (sDirectory) 
      .SetDefaultName (Cellvalue + ".xml") 
      .AppendFilter( "All files (*.*)", "*.*" ) 
      .AppendFilter( "drei (.xml)", "*.xml" ) 
      .SetCurrentFilter( "drei (.xml)" ) 
      .SetValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION, 0, true)    
      .SetValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_PASSWORD, 0, false) 

   End With 
    
    'Save Document
   If oFilePicker.execute() Then 
      sFiles = oFilePicker.getFiles() 
      sFileURL = sFiles(0) 
      Doc.storeToURL( sFileURL, Array() ) 
      MsgBox "Datei als XML gespeichert"
	Else 
                  MsgBox "Speicherung abgebrochen"
   End If 
    
End Sub

Re: Dialog 'speichern unter' mit ausgewähltem dateityp

Verfasst: Mo, 08.11.2010 16:40
von Axel Richter
Hallo,
lto hat geschrieben:

Code: Alles auswählen

Doc.storeToURL( sFileURL, Array() )
Du übergibst der Methode storeToURL ein leeres Array als Parameter MediaDescriptor. Siehe http://api.openoffice.org/docs/common/r ... storeToURL. Dort kannst Du einen bekannten FilterNamen übergeben. Voraussetzung ist allerdings, dass dieser Filtername wirklich korrekt und bekannt ist.

Bsp.:

Code: Alles auswählen

Sub Save_As_XML()

   Doc = ThisComponent

   'Starting FilePicker
   sFilePickerArgs = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)
   oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )
   With oFilePicker
      .Initialize ( sFilePickerArgs() )
      .SetDefaultName ("Testname")
      .AppendFilter( "DocBook File", "*.xml" )      
      .AppendFilter( "drei (.xml)", "*.xml" ) '"drei (.xml)" muss ein bekannter FilterName sein.
      .SetCurrentFilter( "DocBook File" )
      .SetValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION, 0, true)
   End With
   
    'Save Document
   If oFilePicker.execute() Then
      sFiles = oFilePicker.getFiles()
      sFileURL = sFiles(0)
      Dim oMediaDescriptor(0) as new com.sun.star.beans.PropertyValue
      oMediaDescriptor(0).Name = "FilterName"
      oMediaDescriptor(0).Value = oFilePicker.CurrentFilter  
      Doc.storeToURL( sFileURL, oMediaDescriptor() )
      MsgBox "Datei als " & oFilePicker.CurrentFilter & " gespeichert"
   Else
      MsgBox "Speicherung abgebrochen"
   End If
   
End Sub
Bei dem Beispiel habe ich außerdem das Template für den FilePicker abgeändert, denn Dein FILESAVE_SIMPLE hat gar keine CHECKBOX_AUTOEXTENSION.

viele Grüße

Axel

Re: Dialog 'speichern unter' mit ausgewähltem dateityp

Verfasst: Mi, 10.11.2010 15:11
von lto
hallo axel,

vielen dank für deinen code, er funktioniert wunderbar. das mit dem mediadescriptor wäre mir nie aufgefallen. ist glaub ich langsam augenscheinlich, dass ich nicht aus der programmierer-ecke komme ;-)

danke nochmals, lg stefan