Zugriff auf eine Excel Tabelle

Anfängerfragen zum Programmieren mit PureBasic.
Klausi
Beiträge: 3
Registriert: 19.08.2008 08:51

Zugriff auf eine Excel Tabelle

Beitrag von Klausi »

Hallo zusammen,

kann mir jemand einen einfachen Code geben in dem die Grundfunktion zum Zugriff auf eine Excel Datei nachvollzogen werden kann?
Ich habe zwar verstanden dass es über ODBC möglich ist, finde dazu jedoch nichts in der Hilfe.

Klaus
Little John

Beitrag von Little John »

Das würde auch den Rahmen der Hilfe sprengen.
Aber hier findest Du funktionierenden Code: http://www.purebasic.fr/german/viewtopic.php?t=12612

Gruß, Little John
Klausi
Beiträge: 3
Registriert: 19.08.2008 08:51

Beitrag von Klausi »

danke für den Link. Auf den Code bin ich auch schon gestoßen.
Allerdings ist der für den Anfang doch sehr komplex.
Gibt es nicht etwas einfaches in dem einfach nach der Art:

Pfad c:\temp\exceltest.xls, Tabelle1 und Überschriften Spalte 1, Spalte2 Spalte3 sind bekannt:

1. Exceldatei öffnen/zugreifen
2. Tabelleninhalt anzeigen

Kann man das nicht irgentwo nachlesen? Im Hanbuch steht nichts drin..
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Excel benutzt eben ein komplexes Format.

> Im Hanbuch steht nichts drin..
Natürlich nicht.
PB ist nicht dafür erschaffen worden, um auf Microsoft-Dokumente zuzugreifen,
sondern um alles Mögliche zu programmieren.

Wenn dir der Zugriff auf Excel-Dateien noch zu kompliziert ist,
dann musst du dir für den Anfang was Einfacheres suchen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Klausi
Beiträge: 3
Registriert: 19.08.2008 08:51

Beitrag von Klausi »

o.k. das befürchte ich auch.
Ich habe mich zwischenzeitlich an textdateien rangemacht. Das funzt ganz gut.

Aber ich denke trotzdem dass es vielen helfen würde wenn man mal eine einfache Beschreibung für ODBC hätte.
Im Code von mpc ist ja eigentlich alles drin was man brauch.
Leider bin ich noch nicht in der Lage das wesentliche heraus zu filtern.

Vielleicht gelingt es noch jemanden :wink:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Per ODBC möglich.

DSN erstellen (ODBCAD32.EXE) und dann mit SQL bearbeiten.

Es gibt noch die ExDatabase unter PBOSL http://pbosl.purearea.net/ die dir die DSN automatisch erstellt.

Ein Beispiel für ODBC mit Excel fehlt noch. Werde ich noch basteln.

FF :wink:

P.S. Beispiel für Excel

Code: Alles auswählen

EnableExplicit

UseODBCDatabase()
;InitDatabase()

Define.s dbName = GetCurrentDirectory() + "Adressen.xls" ; könnt Ihr anpassen
Define.s DSN
Define.s SQL
Define.l db = 0
Define.l result 

dsn = AddDSN(dbName) ; DSN hinzufügen
Debug "DSM=" + dsn
; Datenbank verbinden
If OpenDatabase(db, DSN, "", "") = 0
  End
EndIf

If IsDatabase(db)
  ; SQL Befehl zum Auslesen von Daten der Tabelle
  SQL = "Select * from [Adressen$] order by nachname asc;"
  If DatabaseQuery(db, SQL) ; SQL Befehl ausführen
    Debug "Daten in Tabelle 'Adressen'" : Debug ""
    While NextDatabaseRow(db) ; gelesene Daten aus der Datenbank durchlaufen
      Debug Str(GetDatabaseLong(db, 0)) + ": " + GetDatabaseString(db, 1) + " " + GetDatabaseString(db, 2) ; gelesene Daten aus der Datenbank ausgeben
    Wend
  EndIf
  CloseDatabase(db)
EndIf

; Tabellen lesen
If ExamineTables(dsn)
  Debug "Tabellen in Database:"
  Debug ""
  While NextTable()
    Debug GetTableName() + "  <--  " + GetTableType()
  Wend
  Debug "" : Debug ""
EndIf

result = RemoveDSN(dbName); DSN wieder entfernen
If Result = 0
  MessageRequester("SQLError", GetSQLInstallerError())
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Klausi:

Ich habe Dir mal was zusammengebastelt, von dem ich denke, dass es
einfach genug ist. Der Zugriff auf die Excel-Datei erfolgt in einer DLL, die
Du von Deinem PB-Code nur aufrufen musst. Der Rest ist Standard-
PB-Werks.

Download Komplettpaket: Hier (ca. 20 KB)

Beispielaufruf:

Code: Alles auswählen

; ExcelHelper-Test

EnableExplicit

Define.s Excelfile, Tablenames, Query, Tablecontent
Define.l ExcelHelper, GetTableNames, GetTableContent
Define.l FieldCounter, LineCounter

; Pfad und Name der Exceldatei -- Bitte anpassen
Excelfile = "D:\Eigene Dateien\Eigene Projekte\PureBasic\ExcelHelper\Mappe1.xls"

; Pfad und Name der ExcelHelper.dll -- Bitte anpassen
ExcelHelper = OpenLibrary(#PB_Any, "ExcelHelper.dll")

If ExcelHelper
  
  ; Tabellennamen der entsprechenden Excel-Datei ermitteln
  GetTableNames = GetFunction(ExcelHelper, "GetTableNames")
  If GetTableNames
    Tablenames = PeekS(CallFunctionFast(GetTableNames, @Excelfile))
    If Tablenames
      MessageRequester("Verfügbare Tabellen:", Tablenames)
    EndIf
  EndIf

  ; Inhalt einer bestimmten Tabelle ermitteln
  GetTableContent = GetFunction(ExcelHelper, "GetTableContent")
  If GetTableContent
    Query = "Select * From [Tabelle1$]" ; Tabellennamen anpassen!
    Tablecontent = PeekS(CallFunctionFast(GetTableContent, @Excelfile, @Query))
  EndIf
  
  CloseLibrary(ExcelHelper)
  
EndIf

If Tablecontent
  
  OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 400, "Inhalt von [Tabelle1$]:")
  CreateGadgetList(WindowID(0))
 
  ListIconGadget(0, 0, 0, 400, 400, "Feld1", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
  For FieldCounter = 2 To CountString(StringField(Tablecontent, 0, #CR$), #LF$)
    AddGadgetColumn(0, FieldCounter - 1, "Feld" + Str(FieldCounter), 100)
  Next  
  
  For LineCounter = 0 To CountString(Tablecontent, #CR$) - 1
    AddGadgetItem(0, -1, StringField(Tablecontent, LineCounter + 1, #CR$))
  Next  
  
  Repeat
  Until WaitWindowEvent()=#PB_Event_CloseWindow
    
  CloseWindow(0)
  
EndIf
Falls Du noch Fragen hast: Immer her damit!

Grüße ... Kiffi
a²+b²=mc²
Antworten