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 :wink:

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 :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

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