Seite 1 von 1
Excel via ODBC
Verfasst: 05.08.2019 23:31
von HeX0R
Ich muss ein paar Excel Dateien per PB auslesen, das Ganze habe ich per ODBC auch schon halbwegs umgesetzt.
Was ich aber einfach nicht auf die Reihe bekomme, ist die Namen der vorhandenen Sheets/Tabellen auszulesen.
Wenn ich weiss, wie das Sheet heisst, kann ich auch direkt drauf zugreifen, aber ich würde gerne vorher die vorhandenen auslesen.
Mit einem ODBC Viewer kann ich sehen, dass die unter SYSTEM TABLE stehen, aber ich bekomme einfach keine SELECT Anweisung hin, die mir die Sheets auflistet.
Hat das schonmal jemand umgesetzt?
Re: Excel via ODBC
Verfasst: 06.08.2019 17:04
von Mijikai
Mann kann das Excel File entpacken und die Sheets im Workbook auslesen.
Hier ein Beispiel (zeigt den Inhalt des Workbooks):
Code: Alles auswählen
EnableExplicit
UseZipPacker()
Global *worksheet
Global worksheet_size.i
Global xml_node.i
Global index.i
Procedure FillTree(*CurrentNode,CurrentSublevel.i)
Protected text.s
Protected *child
If XMLNodeType(*CurrentNode) = #PB_XML_Normal
text = GetXMLNodeName(*CurrentNode) + " (Attributes: "
If ExamineXMLAttributes(*CurrentNode)
While NextXMLAttribute(*CurrentNode)
text + XMLAttributeName(*CurrentNode) + "=" + Chr(34) + XMLAttributeValue(*CurrentNode) + Chr(34) + " "
Wend
EndIf
AddGadgetItem(4, -1, text, 0, CurrentSublevel)
*child = ChildXMLNode(*CurrentNode)
While *child
FillTree(*child, CurrentSublevel + 1)
*child = NextXMLNode(*child)
Wend
EndIf
EndProcedure
If OpenPack(0,"dummy.xlsx");<- change!!!
If ExaminePack(0)
While NextPackEntry(0)
If Right(PackEntryName(0),12) = "workbook.xml"
worksheet_size = PackEntrySize(0,#PB_Packer_UncompressedSize)
If worksheet_size
*worksheet = AllocateMemory(worksheet_size)
If *worksheet
If UncompressPackMemory(0,*worksheet,worksheet_size) = worksheet_size
If CatchXML(1,*worksheet,worksheet_size)
If OpenWindow(3,0,0,600,400, "Excel Worksheet",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TreeGadget(4,10,10,580,380)
xml_node = MainXMLNode(1)
If xml_node
FillTree(xml_node,0)
EndIf
For index = 0 To CountGadgetItems(4) - 1
SetGadgetItemState(4,index,#PB_Tree_Expanded)
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
FreeXML(1)
EndIf
EndIf
EndIf
EndIf
Break
EndIf
Wend
EndIf
ClosePack(0)
EndIf
End
Re: Excel via ODBC
Verfasst: 06.08.2019 22:28
von HeX0R
o.k., auch ne Möglichkeit, müsste ich allerdings die Datei zweimal öffnen.
Mir ist vor allem gerade aufgefallen, dass im ODBC Viewer doch nicht alle Sheets in der SYSTEM TABLE aufgelistet werden
Re: Excel via ODBC
Verfasst: 07.08.2019 08:45
von mk-soft
Müsste mit PB v5.7 immer noch funtionieren...
Link:
https://www.purebasic.fr/english/viewto ... 12&t=67180
ExamineTablle...
Re: Excel via ODBC
Verfasst: 07.08.2019 20:54
von HeX0R
Cool, Danke!
Etwas zu aufwändig zwar, aber das kann ich anpassen.