| |
VB.NET - Ein- und UmsteigerRe: Felder aus Excel-Tabelle als String auslesen | | | Autor: cheaptrick_la | Datum: 01.12.12 09:32 |
| Hallo Manfred,
der Test war gerade etwas umständlich, da die Quelldatei eine xlsx ist und ich sie gerade nur mit Excel 2003 öffnen konnte.
Nach dem Export in eine csv Datei habe ich sie neu geöffnet und siehe da plötzlich werden die negativen Werte auch rechtsbündig dargestellt.
Liegt das nun daran, dass ich hier mit em alten Excel gearbeitet habe oder daran, dass die Funktionen in VB 2008 doch nicht so ganz identisch sind mit denen aus Excel?
gruß
cheapy | |
Felder aus Excel-Tabelle als String auslesen | | | Autor: cheaptrick_la | Datum: 30.11.12 13:51 |
| Hallo,
ich habe eine Excel-Datei die ich in ein Dataset einlese um sie nachher weiter zu verarbeiten.
Leider gibt es da jetzt ein Problem.
In einer Spalte habe ich numerische Werte, wenn die negativ sind, steht das Minus-Zeichen hinter der Zahl und die Zahl hat voranstehende Leerzeichen. Das ist aber nur bei negativen Werten so. In der Excel Tabelle werden Positive Zahlen Rechtsbündig dargestellt und Negative linksbündig aber mit führenden Leerzeichen.
Wenn ich nun die Tabelle in mein Dataset einlese verschwinden die negativen Werte.
Allerdings passiert das nicht immer. Es gibt Spalten, wo diese Werte Problemlos eingelesen werden.
In der Betroffenen Spalte tauchen diese Negativen Werte etwa ab Zeile 220 auf. Die richtig erkannten (negativen Werte) liegen weiter vorne.
Kann es sein, dass da irgendeine "künstliche Intelligenz" versucht den Datentyp einer Tabelle zu erkennen?
Wenn ja, wie kann ich das verhindern?
Ich verarbeite das Dataset später eh komplett als String.
Function ExportExcelIntoText(ByVal FullFileName As String, ByVal _
xlTabellenblatt As String) As String
Dim tabname As String
Dim tables As DataTable
Dim sheet As String
Dim p1 As Integer
...
...
...
Using cnn As New OleDb.OleDbConnection( _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FullFileName + _
";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";")
Try
cnn.Open()
Catch ex As Exception
Trace.TraceWarning(ex.Message)
End Try
If cnn.State = ConnectionState.Open Then
Using strm As New StreamWriter(TextFilename, False, _
Encoding.GetEncoding(28592))
tables = cnn.GetOleDbSchemaTable( _
System.Data.OleDb.OleDbSchemaGuid.Tables, New Object( _
) {Nothing, _
Nothing, Nothing, Nothing})
Dim int As Integer
For int = 0 To tables.Rows.Count
If tables.Rows(int)!TABLE_TYPE.ToString = "TABLE" Then
tabname = (tables.Rows(int)!TABLE_NAME.ToString())
If UCase(Left(xlTabellenblatt, 6)) = "SELECT" Then
Using da As New OleDb.OleDbDataAdapter( _
xlTabellenblatt, cnn)
Call cpXL_Data(strm, da)
Exit For
End Using
'Das richtige Tabellenblatt suchen
ElseIf InStr(tabname, xlTabellenblatt) > 0 And _
InStr(tabname, "$_") = 0 And InStr(tabname, _
"$'_") = 0 Then
Using da As New OleDb.OleDbDataAdapter("SELECT" & _
"* FROM [" & tabname & "]", cnn)
Call cpXL_Data(strm, da)
End Using
Exit For
End If
End If
Next
End Using
ExportExcelIntoText = TextFilename
Else
ExportExcelIntoText = ""
End If
End Using
End Function
Sub cpXL_Data(ByVal strm As Object, ByVal da As Object)
Try
Using ds As New DataSet("ExcelFile")
da.Fill(ds)
strm.BaseStream.Seek(0, SeekOrigin.End)
'Spaltenkoepfe schreiben
Dim h As Integer
Dim i As Integer
Dim ignoreLine As Boolean
Dim anzCol As Integer
Dim colName As String
Dim colVal As String
Dim primaryKeys() As String
Dim anzPK As Integer
primaryKeys = extractString(Dts.Variables("PrimaryKeys").Value)
anzPK = primaryKeys.Length
anzCol = ds.Tables(0).Columns.Count - 1
Dim pkList(anzCol) As Integer
...
...
...
For Each column As DataColumn In ds.Tables(0).Columns
If Not IsDBNull(row(column)) Then
...
...
endif
Next
...
...
End Using
Catch ex As Exception
Trace.TraceWarning(ex.Message)
End Try
End Sub Bin für jeden Tipp dankbar.
Gruß
cheapy | |
Re: Felder aus Excel-Tabelle als String auslesen | | | Autor: Manfred X | Datum: 30.11.12 15:41 |
| Hallo!
Exportiere die Excel-Tabelle in eine CSV-Datei und schau mal nach,
wie die Werte aussehen, die von Excel in diese Datei eingetragen werden.
MfG
Manfred | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|