Probleme beim einlesen von Excel-Zellen
Verfasst: 04.09.2007 12:06
Hallo Leutz....
Ich möchte diverse Zellen einer existierenden Excel-Tabelle zur Übung auswerten und
habe mir dazu den Code von TS kopiert und ein wenig angepasst.
Die Tabelle sieht folgendermaßen aus.
18.08.2007 | 01.09.2007 | 3-KIM-269-IT23_ITR100 | WERK-4357 | IT23/ITR100 | 15423 | 6,60 | 3M Deutschland | 200193460 | 5058466
In einigen der zehn dargestellten Spalten, kann sich aber der Datentyp ändern, so z.B wo "6,60" steht kann auch "ohne" stehen.
Wenn ich nun eine Zelle einlese und den Datentyp der Zelle mittels
DatabaseColumnType() ermitteln möchte, bekomme ich z.B. für die Zelle
mit der "6,60" als Datentyp "2" also String zurück. Lese ich diese Zelle dann über GetDatabaseString() ein, so ist der Rückgabestring LEER...
Ähnlich verhalten sich auch andere Zellen. Woran liegt das wohl?
Kann mir einer sagen, was ich so gravierendes falsch mache?denn falsch?
Ich möchte diverse Zellen einer existierenden Excel-Tabelle zur Übung auswerten und
habe mir dazu den Code von TS kopiert und ein wenig angepasst.
Die Tabelle sieht folgendermaßen aus.
18.08.2007 | 01.09.2007 | 3-KIM-269-IT23_ITR100 | WERK-4357 | IT23/ITR100 | 15423 | 6,60 | 3M Deutschland | 200193460 | 5058466
In einigen der zehn dargestellten Spalten, kann sich aber der Datentyp ändern, so z.B wo "6,60" steht kann auch "ohne" stehen.
Wenn ich nun eine Zelle einlese und den Datentyp der Zelle mittels
DatabaseColumnType() ermitteln möchte, bekomme ich z.B. für die Zelle
mit der "6,60" als Datentyp "2" also String zurück. Lese ich diese Zelle dann über GetDatabaseString() ein, so ist der Rückgabestring LEER...
Ähnlich verhalten sich auch andere Zellen. Woran liegt das wohl?
Kann mir einer sagen, was ich so gravierendes falsch mache?denn falsch?
Code: Alles auswählen
Enumeration 1
#ODBC_ADD_DSN ; // Add data source
#ODBC_CONFIG_DSN ; // Configure (edit) Data source
#ODBC_REMOVE_DSN ; // Remove data source
#ODBC_ADD_SYS_DSN ; // add a system DSN
#ODBC_CONFIG_SYS_DSN ; // Configure a system DSN
#ODBC_REMOVE_SYS_DSN ; // remove a system DSN
#ODBC_REMOVE_DEFAULT_DSN ; // remove the default DSN
EndEnumeration
Procedure.s AddDSN(databasename.s, user.s = "", pass.s = "", driver.s = "") ; Result DSN
Protected name.s, strDriver.s, strAttributes.s
Protected l.l, result.l
Protected *buffer.Character
name.s = GetFilePart(databasename)
name = Left(name.s, Len(name.s) - 4)
name = "Pure" + name
If driver = ""
driver = GetExtensionPart(databasename)
EndIf
Select UCase(driver)
Case "ACCESS", "MDB"
strDriver.s = "Microsoft Access Driver (*.mdb)"
Case "EXCEL", "XLS"
strDriver.s = "Microsoft Excel Driver (*.xls)"
Case "DBASE", "DBF"
strDriver.s = "Microsoft dBase Driver (*.dbf)"
Case "TEXT", "TXT", "CSV"
strDriver.s = "Microsoft Text Driver (*.txt; *.csv)"
Default
strDriver.s = driver
EndSelect
strAttributes.s = "Server=APServer;Description=" + name
strAttributes.s + ";DSN=" + name
strAttributes.s + ";DBQ=" + databasename
strAttributes.s + ";UID=" + user
strAttributes.s + ";PWD=" + pass + ";"
*buffer = @strAttributes
For l = 0 To Len(strAttributes) - 1
If *buffer\c = ';'
*buffer\c = 0
EndIf
*buffer + 1
Next l
result = SQLConfigDataSource_(0, #ODBC_ADD_DSN, strDriver, @strAttributes)
If result: ProcedureReturn name: Else: ProcedureReturn "": EndIf
EndProcedure
Procedure.l RemoveDSN(databasename.s, user.s = "", pass.s = "", driver.s = "")
Protected name.s, strDriver.s, strAttributes.s
Protected l.l, result.l
Protected *buffer.Character
name = GetFilePart(databasename)
name = Left(name, Len(name) - 4)
name = "Pure" + name
If driver = ""
driver = GetExtensionPart(databasename)
EndIf
Select UCase(driver)
Case "ACCESS", "MDB"
strDriver = "Microsoft Access Driver (*.mdb)"
Case "EXCEL", "XLS"
strDriver = "Microsoft Excel Driver (*.xls)"
Case "DBASE", "DBF"
strDriver = "Microsoft dBase Driver (*.dbf)"
Case "TEXT", "TXT", "CSV"
strDriver = "Microsoft Text Driver (*.txt; *.csv)"
Default
strDriver = driver
EndSelect
strAttributes = "DSN=" + name + ";"
*buffer = @strAttributes
For l = 0 To Len(strAttributes) - 1
If *buffer\c = ';'
*buffer\c = 0
EndIf
*buffer + 1
Next l
result = SQLConfigDataSource_(0, #ODBC_REMOVE_DSN, strDriver, @strAttributes)
ProcedureReturn result
EndProcedure
Procedure ReadCellValue(excelDB.s, excelSheet.s, excelRow.l ,excelColumn.l)
Base.s = AddDSN(excelDB)
If Base
If OpenDatabase(0, Base, "", "")
excelSheet="["+excelSheet+"$]"
sql.s = "Select * From "+excelSheet
If DatabaseQuery(0, sql)
For y=1 To excelRow-1: NextDatabaseRow(0): Next y
datatype.l=DatabaseColumnType(0,excelColumn-1)
Select datatype
Case 1: ProcedureReturn GetDatabaseLong(0, excelColumn-1)
Case 2: ProcedureReturn GetDatabaseString(0, excelColumn-1)
Case 3: ProcedureReturn GetDatabaseFloat(0, excelColumn-1)
Case 4: ProcedureReturn GetDatabaseDouble(0, excelColumn-1)
Case 5: ProcedureReturn GetDatabaseQuad(0, excelColumn-1)
EndSelect
EndIf
EndIf
EndIf
RemoveDSN(excelDB, "", "")
EndProcedure
InitDatabase()
ReadCellValue("E:\Daten\Testdaten.xls", "Blatt1", 10, 6)