Seite 1 von 1
Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 16:46
von Chris
Hallo,
also ich habe über Active X das einlesen einer Excel-Tabelle und Umwandeln in eine DBF-Datei gelöst. Jeztt habe ich allerdings ein Problem mit Zellen die Numerische Werte mit mehr als zwei Nachkommastellen haben. Wenn ich diese mit Range("XY"):Value auslese, dann erhalte ich hier einen gerundeten Wert auf zwei Nachkommastellen. Die Formatierung der Zellen steht in Excel bereits auf Numerisch mit drei Nachkommastellen, es wird auch korrekt angezeigt, nur eben beim Einlesen erhalte ich den falschen Wert.
Hat von euch jemand eine Idee wie ich Excel dazu bringe mir die Werte mit allen Nachkommastellen auszugeben?
Danke schon im Voraus.
Gruß,
Chris
Re: Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 17:13
von Rolf Ramacher
Hi Chris.,
das habe ich bei mir so
Code: Alles auswählen
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( "Excel ist nicht installiert" )
RETURN Nil
ENDIF
oExcel:DisplayAlerts := .F.
oExcel:visible := .f.
oBook := oExcel:Workbooks:Open(cFile)
oSheetDat := oBook:Sheets(cWork)
oSheetDat:Select()
oRange:=oSheetDat:Range(cVonBis)
oRange:select()
aExcelWerte:=oRange:Value()
For i = 1 to Len(aExcelWerte)
nZaehler++
If nZaehler % 1000 == 0
oAnzStatic:setcaption("Adressn werden gelesen: "+aExcelwerte[i][3])
nZaehler:=0
Endif
cBemerk:=""
Do Case
Case valtype(aExcelwerte[i][5]) = "N"
cPlz:=alltrim(str(Int(aExcelWerte[i][5])))
Case valtype(aExcelwerte[i][5]) = "C"
cPlz:=alltrim(aExcelWerte[i][5])
Endcase
If cBis ="G"
Do Case
Case valtype(aExcelwerte[i][7])="N"
cIndex:=strzero(aExcelwerte[i][7],6)
Case Valtype(aExcelWerte[i][7])="C"
cIndex:=strzero(val(aExcelwerte[i][7]),6)
Otherwise
cIndex:=padr(alltrim(aExcelwerte[i][3])+alltrim(aExcelwerte[i][4])+cPlz,105)
Endcase
Else
cIndex:=padr(alltrim(aExcelwerte[i][3])+alltrim(aExcelwerte[i][4])+cPlz,105)
Endif
If Adress->(!DbSeek(cIndex))
Adress->(DbAppend())
If cBis="G"
If Valtype(aExcelwerte[i][7])="N"
Adress->Kdnr:=aExcelwerte[i][7]
Else
Adress->Kdnr:=val(alltrim(aExcelwerte[i][7]))
Endif
Else
Adress->Kdnr:=nKdnr+1
Endif
Endif
Do While Adress->(!Rlock())
Enddo
If aExcelWerte[i][1] <> NIL
Adress->Ana:=alltrim(aExcelwerte[i][1])
Endif
If aExcelwerte[i][2] <> NIL
Adress->VName:=alltrim(aExcelwerte[i][2])
Endif
Adress->Str:=alltrim(aExcelwerte[i][4])
Adress->NName:=alltrim(aExcelWerte[i][3])
If valtype(aExcelwerte[i][5]) = "N"
Adress->Plz:=alltrim(str(Int(aExcelwerte[i][5])))
Else
Adress->Plz:=alltrim(aExcelWerte[i][5])
Endif
If aExcelWerte[i][6] <> Nil
Adress->Ort:=alltrim(aExcelWerte[i][6])
Endif
If cBis="H"
If aExcelWerte[i][8] <> NIL
Do Case
Case valtype(aExcelWerte[i][8]) = "C"
cBemerk+=alltrim(aExcelWerte[i][8])
Case valtype(aExcelWerte[i][8]) = "N"
cBemerk+=alltrim(str(Int(aExcelWerte[i][8])))
Otherwise
cBemerk+=dtoc(aExcelWerte[i][8])
Endcase
Endif
Endif
If cBis="I"
If aExcelWerte[i][9] <> NIL
Do Case
Case valtype(aExcelWerte[i][9]) = "C"
cBemerk+=alltrim(aExcelWerte[i][9])
Case valtype(aExcelWerte[i][9]) = "N"
cBemerk+=alltrim(str(Int(aExcelWerte[i][9])))
Otherwise
cBemerk+=dtoc(aExcelWerte[i][9])
Endcase
Endif
Adress->Bemerk:=cBemerk
Endif
If cBis="J"
If aExcelWerte[i][10] <> NIL
If valtype(aExcelWerte[i][10]) = "C"
Adress->Tel:=alltrim(aExcelWerte[i][10])
Else
Adress->Tel:=alltrim(str(Int(aExcelWerte[i][10])))
Endif
Endif
Endif
If cBis="K"
If aExcelWerte[i][11] <> NIL
If valtype(aExcelWerte[i][11]) = "C"
Adress->Tel2:=alltrim(aExcelWerte[i][11])
Else
Adress->Tel2:=alltrim(str(Int(aExcelWerte[i][11])))
Endif
Endif
Endif
Adress->(DbUnlock())
nKdnr++
Next i
Hierbei werden Adressen eingelesen. Vielleicht hilft es dir
Re: Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 18:04
von Wolfgang Ciriack
Hallo Rolf,
tue und doch bitte den Gefallen, und lies dir vor einer Antwort mal die Frage genau durch. Ich weiss natürlich nicht, ob deine Adressen irgendwo 3 Nachkommastellen haben
Re: Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 18:17
von Koverhage
Hallo Chris,
wie lautet Deine Anweisung zur Sortierung und wann machst Du die ?
Re: Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 18:20
von Koverhage
bei mir lautet die z.B.
// Liefermenge
oSheet:Cells(nRow,2):Value := strtran(ltrim(str(l_menge)),".",",")
oSheet:Cells(nRow,2):NumberFormat := "#0,000"
oSheet:Cells(nRow,2):HorizontalAlignment = xlRight
Re: Excel - Einlesen einer Tabelle
Verfasst: Do, 21. Apr 2011 20:30
von Chris
Hallo,
danke erstmal für eure Antworten. Inzwischen hab ich mein Problem aber lösen können. Es lag an der Einstellung von
mit
hat diese 2 zurückgegeben. Nachdem ich es auf
gesetzt habe, habe ich auch die richtigen Werte aus Excel zurückbekommen.
Re: Excel - Einlesen einer Tabelle
Verfasst: Sa, 23. Apr 2011 10:04
von Koverhage
Hallo Chris,
laut Doku ist dies nur für die Anzeige im Xbase++ Programm, dürfte so mit nicht die Ursache sein.
Werde das aber mal ausprobieren, wenn es so ist, könnte es für
ein bestimmtes Problem sehr hilfreich sein.
Re: Excel - Einlesen einer Tabelle
Verfasst: Sa, 23. Apr 2011 20:24
von AUGE_OHR
Koverhage hat geschrieben:laut Doku ist dies nur für die Anzeige im Xbase++ Programm, dürfte so mit nicht die Ursache sein.
Ich kann bestätigen das es für alle activeX Verbindungen gilt die ich bislang ausprobiert habe.
wenn man, mittels DispHpr.DLL und Ot4Xb, einen "Zeit" String mit Dezimal Stellen YYYYMMDDHHMMSS.ccc erhalten möchte muss man
setzen