Excel via ODBC

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Excel via ODBC

Beitrag 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?
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Excel via ODBC

Beitrag 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
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Excel via ODBC

Beitrag 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 :shock:
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Excel via ODBC

Beitrag von mk-soft »

Müsste mit PB v5.7 immer noch funtionieren...

Link: https://www.purebasic.fr/english/viewto ... 12&t=67180

ExamineTablle...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Excel via ODBC

Beitrag von HeX0R »

Cool, Danke!
Etwas zu aufwändig zwar, aber das kann ich anpassen.
Antworten