Seite 1 von 1
Zugriff auf eine Excel Tabelle
Verfasst: 19.08.2008 08:58
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
Verfasst: 19.08.2008 09:33
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
Verfasst: 19.08.2008 11:24
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..
Verfasst: 19.08.2008 15:00
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.
Verfasst: 19.08.2008 15:19
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

Verfasst: 19.08.2008 15:23
von ts-soft
Verfasst: 19.08.2008 15:26
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
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
Verfasst: 19.08.2008 22:05
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