vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Felder aus Excel-Tabelle als String auslesen1.506cheaptrick_la30.11.12 13:51
Re: Felder aus Excel-Tabelle als String auslesen830Manfred X30.11.12 15:41
Re: Felder aus Excel-Tabelle als String auslesen858cheaptrick_la01.12.12 09:32

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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