uno:SaveAll - parameter?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: uno:SaveAll - parameter?

Beitrag von Stephan »

Leider konnte ich nirgends eine Doku von uno:SaveAll
finden, in welcher eine Beschreibung der Parameter vorkommt.

Weiss jemand, wie das geht?
Ich kenne keine Parameter-Dokumentation der sog. dispatch-Befehle wie "uno:SaveAll". Das es eine solche Dokumentation nicht gibt mag dir komisch vorkommen, aber es ist leider Sachstand.

Lösung in solchen Fällen ist nur das Internet zu durchforsten ob es Informationen dazu gibt die jemand mittels Versuch-Irrtum herausgefunden hat.

Ansonsten darfst Du eben keinen dispatcher-code verwenden sondern mußt das Ganze mit nativem StarBasic programmieren.


Gruß
Stephan
wellmo
**
Beiträge: 32
Registriert: Di, 13.12.2011 19:21

Re: uno:SaveAll - parameter?

Beitrag von wellmo »

Hallo Jody

Hier mal ein Code-Beispiel das ich benutze:

Code: Alles auswählen

Sub Speichern
   Dim oDoc As Object
   Dim oSheet As Object
   Dim oCell1 As Object
   Dim oCell2 As Object
   Dim oCell3 As Object
   Dim sName As String
   Dim sVorname As String
   Dim sLaufwerk As String
   Dim sDirname As String
   Dim sFilename as String
   Dim dummy()
   oDoc = ThisComponent
   oSheet = oDoc.Sheets.getByName("Tabelle1")
   oCell1 = oSheet.getCellByPosition(3, 0) 
   sName = oCell1.String
   oCell2 = oSheet.getCellByPosition(2, 0)
   sVorname = oCell2.String
   oCell3 = oSheet.getCellByPosition(4, 0)
   sNummer= oCell3.String
   sLaufwerk = "C:/Users/Benutzername/Desktop/Kunden/"
   sDirname =  sName & " " & sVorname
   sFilename = sNummer & " " & sName & " " & sVorname
   neuerpfad = sLaufwerk + "/" + sDirname + "/" + sFilename + ".ods"
   dateiurl=converttourl(neuerpfad)
   odoc.storetourl(dateiurl,dummy())
  end Sub
Tabelle1 - Das musst du anpassen, Name deiner Tabelle
Und bei sLaufwerk musst du den Speicherpfad nach deinem belieben anpassen, so wie es jetzt ist, speichert es auf den Desktop des Benutzers "Benutzername" in den Ordner Kunden.
Den Speichernamen setzt es aus 3 Zellen zusammen, nämlich oCell1 - 3

Hilft dir das weiter?

Gruss Dave
Frieder D.
****
Beiträge: 115
Registriert: Di, 10.01.2012 10:51
Kontaktdaten:

Re: uno:SaveAll - parameter?

Beitrag von Frieder D. »

Hallo zusammen

@wellmo:
Dein Code ruft aber leider nicht den Speichern-Dialog auf.

@Jody
Ich habe dir mal eine Funktion geschrieben (mit der API),
mit der ein Speichern-Dialog geöffnet wir, und der du ein Dokument, ein Verzeichnis,
und einen Name übergeben kannst.
(Falls das Verzeichnis noch nicht existiert, wird es einfach angelegt.)

Mit der API kann man leider nicht, wie mit dem Dispacher,
einfach den normalen Speichern-Dialog mitsamt dazugehörigen Funktionen aufrufen.
Mann muss sich das alles selber Basteln.

Meine Speichern-Funktion erlaubt nur das Speichern in ODF - Formaten (odt,ods,odp,odg,odb,odf), und auch nicht als Vorlage.
dafür erkennt sie selbstständig, was es für ein Dokument ist.(Endung wird selbstständig erzeugt.)
Wenn das Dokument in Fremdformaten abgespeichert werden soll, benötigt man zusätzliche Filter.

Es gibt in OO und LO leider einen Bug, so das man dem Windows- eigenen FilePicker-Dialog keinen Pfad übergeben kann.
Mit dem LO oder OO eigenen Dialog geht es aber.(muss man unter "Extrs"->"Optionen"->Allgemein" einstellen.)
Unter Linux tritt dieser Bug nicht auf.

Aber nun Zum Code:
In dem Sub "Test" musst du noch den gewünschten Name, und das Verzeichnis anpassen.
Die eigentliche Speichern-Funktion ist: "Function saveDocument(...)"
Das Sub Test dient lediglich dazu, das du siehst, wie man die Funktion aufruft.
Die Funktion selber gibt "True" zurück, wenn alles geklappt hat.
Falls das dokument nicht gespeichert wurde gibt die Funktion "False" zurück.

Code: Alles auswählen

REM  *****  BASIC  *****
Sub Test
Dim oDoc As object
dim sDir As String
Dim sFileName As String
dim bSaveCoppy AS Boolean 
'das Aktuelledokument
  oDoc=ThisComponent
'Dein gewünschtes Verzeichnis:
  sDir="C:/Users/UserName/Desktop/Kunden/"
'Gewünschter Name des Dokuments, ohne Endung!
  sFileName ="Mein_Dokument"
  bSaveCoppy=False 'False Entspricht dem normalen "Speichern unter"
  'Wenn "bSaveCoppy=True" wird eine Kopie des Dokuments gespeichert,
  'Das offene Dokument bleibt aber unter dem alten Verzeichnis, und wird nicht  gespeichert.

'Aufruf der Funktion, und Übergabe der Parameter.
'Gleichzeitig überprüfe ich hier, ob das Speichern auch geklappt hat.
  if not saveDocument(oDoc, sDir, sFileName,bSaveCoppy) then
      MsgBox "Das Dokument konnte nicht gespeichert werden.",16,"Fehler"
  end if
end sub

Function saveDocument(ByVal oDoc As object, ByVal sDir As String,_
                      ByVal sFileName As String, ByVal bSaveCoppy As Boolean)As Boolean 
Dim sEnding$
Dim Dialogtyp(0)
dim sUrl$ 
Dim MyDialog As object
dim dummy()
Dim FilterName As String

'Überprüfen, ob das Verzeichnis bereits existiert.
  If Not FileExists(sDir)Then 'wenn nicht,
     MkDir sDir 'dann anlegen des Verzeichnises 
  End if
On error goto Errorhandler 'Wenn ein Fehler auftrit gehe zu
'Dateityp ermitteln, und Endung festlegen.
  If oDoc.supportsService("com.sun.star.text.TextDocument") Then
    sEnding = ".odt"
    FilterName="ODF Textdokument(.odt)"
  elseIf oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
    sEnding = ".ods"
    FilterName="ODF Tabellendokument(.ods)"
  elseIf oDoc.supportsService("com.sun.star.presentation.PresentationDocument") Then
    sEnding = ".odp"
    FilterName="ODF Präsentation(.odp)"
  elseIf oDoc.supportsService("com.sun.star.drawing.DrawingDocument") Then
    sEnding = ".odg" 
    FilterName = "ODF Zeichnung(.odg)"
  elseIf oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") Then
    sEnding = ".odb" 
    FilterName = "ODF Datenbank(.odb)"
  elseIf oDoc.supportsService("com.sun.star.formula.FormulaProperties") Then
    sEnding = ".odf" 
    FilterName= "ODF Formel(.odf)"
  Else
    goto Errorhandler
  End if
'Endung an den Namen anhängen
  sFileName = sFileName & sEnding
'Pfad auswahldialog initialisieren
  MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
  DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
  With MyDialog
    .initialize( DialogTyp())
    .displaydirectory=converttourl(sDir)
    .DefaultName = sFileName
    .appendFilter( FilterName , "*" & sEnding )
  end With
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
  If MyDialog.execute() = _
    com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
    ' ausgewählter Dateiname
    sUrl = MyDialog.Files(0)
    'Datei Speichern
    If bSaveCoppy Then
      oDoc.storeToUrl(sUrl,dummy()) '"storeToUrl" bewirkt,
      'dass das dokument zwar unter der adresse gespeichert wird, 
      'aber das geöffnete dokument bleibt das unter dem vorherigen speicherort.
    Else
      oDoc.storeAsUrl(sUrl,dummy()) 'Das normale "Speichern unter".
    end if
    saveDocument=True
    Exit Function
  End if
Errorhandler:
  saveDocument=False
End Function
Gruß Frieder
Antworten