Base-Daten (Formular mit mehrere Abfragen) per Makro nach Calc exportieren

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

Moderator: Moderatoren

PV-Frau
Beiträge: 1
Registriert: Di, 15.11.2016 14:19

Base-Daten (Formular mit mehrere Abfragen) per Makro nach Calc exportieren

Beitrag von PV-Frau »

Hallo zusammen,
Ich habe eine Datenbank, in der gibt es mehrere Tabellen. Weiter gibt es drei Abfragen, die als Filter dienen sollen.
Ich habe ein Formular erstellt, in der ich über Textfelder filtern kann, was ich angezeigt bekomme. Desweiteren sind Textfeld angegeben, die meine Auswahl aus der Tabelle nochmal darstellen.
Diese Filterung und Auswahl findet drei mal statt. Jetzt möchte ich die Daten, die in der aktuellen Auswahl stehen nach CALC exportieren.

Im Forum habe ich dazu dieses Thema dazu gefunden: viewtopic.php?f=18&t=45526
Hiereinmal eine Kopie des Quellcodes:

Code: Alles auswählen

Sub ExportData
   REM Speicherpfad
   sPath = "C:"
   REM Dateiname
   sTitle = "Datenexport vom " & Date & ".ods"
   REM Name der Abfrage, Tabelle oder SQL-Statement
   'sQueryName = "meineTabelle"
   'sQueryName = "meineAbfrage"
   sQueryName = "SELECT * FROM ""meineTabelle"""
   
   sURL = ConvertToURL(sPath & "/" & sTitle)
   If FileExists(sURL) Then
      i = MsgBox(">" & sTitle & "<" & Chr(13) & "Datei existiert bereits." & _
                  Chr(13) & Chr(13) & "Überschreiben?",52,"Hinweis")
      If i <> 6 Then
         Exit Sub
      End If
   End If
   oCon = thisComponent.Parent.CurrentController.ActiveConnection
   If oCon.Tables.hasByName(sQueryName) Then
      oPrepStatement = oCon.prepareCommand(sQueryName,0)
   ElseIf oCon.Queries.hasByName(sQueryName) Then
      oPrepStatement = oCon.prepareCommand(sQueryName,1)
   Else
      oPrepStatement = oCon.prepareCommand(sQueryName,2)
   End If
   oResult = oPrepStatement.executeQuery
   aColumns = oPrepStatement.Columns.ElementNames
   oDoc = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
   oSheet = oDoc.Sheets(0)
   nColumnCount = UBound(aColumns)
   Dim aLine(nColumnCount)
   Dim aData(0)
   aData(0) = aColumns
   nUpperBoundary = 0
   Do While oResult.Next
      nUpperBoundary = UBound(aData)+1
      ReDim Preserve aData(nUpperBoundary)
      ReDim aLine(nColumnCount)
      For i = 0 To nColumnCount
         aLine(i) = oResult.getString(i+1)
      Next i
      aData(nUpperBoundary) = aLine
   Loop
   oRange = oSheet.getCellRangeByPosition(0,0,nColumnCount,nUpperBoundary)
   oRange.setDataArray(aData)
   Dim args(0) as New com.sun.star.beans.PropertyValue
   args(0).Name = "Overwrite"
   args(0).Value = True
   oDoc.StoreAsURL(sURL,args)
   oDoc.close(False)
End Sub
Leider sind meine Kenntnisse in LibreOffice noch nicht so gut, dass ich alles verstehe, was dahinter steht.

Wenn ich nun mehrere Abfragen und Auswahlfelder habe, wie muss ich die in den Code einbinden, damit sie übertragen werden? Muss ich den zweiten Teil mehrmals durchführen, da ich ja auch auf mehrere Tabellen/Abfragen zugreiffe?
In die zweite vollständige If-Abfrage muss ich meine Tabellen- und Abfragenamen eingeben, richtig?

MfG
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Base-Daten (Formular mit mehrere Abfragen) per Makro nach Calc exportieren

Beitrag von F3K Total »

Hallo,
für diese Aufgabe benötigst du kein Makro, es geht auch ohne, siehe Videotutorial 09 OpenOffice Base: Daten nach Calc exportieren, findest du in meiner Signatur.
Gruß R
Antworten