Excel - Einlesen einer Tabelle
Moderator: Moderatoren
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: Fr, 17. Feb 2006 8:51
- Wohnort: München
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Excel - Einlesen einer Tabelle
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
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
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Excel - Einlesen einer Tabelle
Hi Chris.,
das habe ich bei mir so
Hierbei werden Adressen eingelesen. Vielleicht hilft es dir
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
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Excel - Einlesen einer Tabelle
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
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
Viele Grüße
Wolfgang
Wolfgang
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Excel - Einlesen einer Tabelle
Hallo Chris,
wie lautet Deine Anweisung zur Sortierung und wann machst Du die ?
wie lautet Deine Anweisung zur Sortierung und wann machst Du die ?
Gruß
Klaus
Klaus
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Excel - Einlesen einer Tabelle
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
// Liefermenge
oSheet:Cells(nRow,2):Value := strtran(ltrim(str(l_menge)),".",",")
oSheet:Cells(nRow,2):NumberFormat := "#0,000"
oSheet:Cells(nRow,2):HorizontalAlignment = xlRight
Gruß
Klaus
Klaus
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: Fr, 17. Feb 2006 8:51
- Wohnort: München
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Excel - Einlesen einer Tabelle
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.
danke erstmal für eure Antworten. Inzwischen hab ich mein Problem aber lösen können. Es lag an der Einstellung von
Code: Alles auswählen
SET DECIMALS TO
Code: Alles auswählen
SET(_SET_DECIMALS)
Code: Alles auswählen
SET(_SET_DECIMALS, 4)
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Excel - Einlesen einer Tabelle
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.
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.
Gruß
Klaus
Klaus
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Excel - Einlesen einer Tabelle
Ich kann bestätigen das es für alle activeX Verbindungen gilt die ich bislang ausprobiert habe.Koverhage hat geschrieben:laut Doku ist dies nur für die Anzeige im Xbase++ Programm, dürfte so mit nicht die Ursache sein.
wenn man, mittels DispHpr.DLL und Ot4Xb, einen "Zeit" String mit Dezimal Stellen YYYYMMDDHHMMSS.ccc erhalten möchte muss man
Code: Alles auswählen
SET DECIMALS TO 4
gruss by OHR
Jimmy
Jimmy