tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von VScan
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
982
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    Guten Tag Meister der Tutorials!

    Wie viele die hier schreiben habe ich ich Problem....

    Alsooo....
    Ich habe ein Programm das mehrere Excel(xls) Dateien zu einer zusammenfasst.
    Dazu lade ich die Daten mittels OleDb in eine DataTable.
    Dann schreibe ich die Daten in eine xml und diese wandle ich in eine .xls um.

    Das Problem ist nun, dass wenn in Spalten nur Zahlen sind, die erste Reihe nicht übernommen wird, also wenn in Spalte A nur Zahlen sind dann fehlt in der Zelle A1 der Inhalt.

    Dieser fehler entsteht schon an der Stelle, an der die Daten in die DataTable geschrieben werden. Dort hat diese Zelle den value DBNull, obwohl sie gar nicht leer ist!
    Es liegt auch nicht an der Datei, da dies bei mehreren der Fall ist.

    Gibt es jemanden der mir helfen kann?

    Hier ist der Code der die xls in die DataTable schreibt.:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
        Private Function GetExcelDataSet(ByVal excelFile As String, ByVal headers As Boolean) As DataSet
            Dim ds As New DataSet()
     
            Dim con As New OleDbConnection()
            con.ConnectionString = "Data Source=" & excelFile & ";Provider=Microsoft.Jet.OLEDB.4.0;"
     
            If headers Then
                con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=Yes"""
            Else
                con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=No"""
            End If
     
            con.Open()
            Dim sheets As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
     
            For Each sheet As DataRow In sheets.Rows
                Dim tableName As String = sheet("Table_Name").ToString()
                Dim sql As String = "SELECT * FROM [" & tableName & "]"
                Dim adap As New OleDbDataAdapter(sql, con)
                adap.Fill(ds, "DBASE")
                If zaehler > 0 Then
                    ds.Tables("DBASE").Rows.RemoveAt(0)
                End If
            Next
     
            con.Close()
            Return ds
        End Function

    Und natürlich:

    Vielen Dank für euer Intresse wenn ihr es lest und noch mehr Dank wenn ihr mir helft

    Ok mitlerweile habe ich herausgefunden, dass es daran liegt da in der Spalte mehrere Dateitypen vorkommen.
    Bei dem Select guckt er dann welcher Datentyp am meisten vertreten ist und alle Zellen die einen anderen Typ enthalten bekommen den Wert System.DBNull...

    So wie ich das verstanden habe muss ich bei dem Select den Dateitypen den er nehmen soll vorgeben.... wie weiß ich noch nicht.. ich halte euch auf dem laufenden.
    Geändert von CShark (25.11.11 um 11:35 Uhr) Grund: Neue Infos
     

  2. #2
    Avatar von VScan
    VScan VScan ist offline Mitglied Gold
    Registriert seit
    Dec 2008
    Ort
    Munich
    Beiträge
    131
    Hey,

    hoffe Du hast schon eine Lösung gefunden, aber wenn nicht, werden in der Regel Parameter verwendet um das ganze streng typisiert zu implementieren.

    Hier ein Link dazu:
    http://msdn.microsoft.com/de-de/libr...0%29.aspx#Y115

    Viele Grüße,

    VScan
    CShark bedankt sich. 

  3. #3
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    Hey hey,
    naja also ich habe schon eine Lösung gefunden, aber di eist nicht ganz "sauber"...
    Ich lese die .xls ohne die Header aus.
    Die Überschriften hole ich mir dann indem ich die .xls in eine .csv umschreibe.
    Alle Daten der ganzen .xls Dateien sind dann in der DataTable und werden zusammen mit den Überschriften weggeschrieben.

    MfG,

    CShark
     

  4. #4
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    Heureka!
    Soooo jetzt habe ich das ganze endgültig gelöst!

    Nochmal Danke VScan durch dich hab ich mein Problem richtig und besser lösen können.
    Ich schreibe jetzt nichts mehr in CSVs oder sonstiges.

    Das Zusammenfassen funktioniert, da das umschrieben in die CSVs wegfällt, auch nur noch einen Bruchteil des vorherigen und die Überschriften sind trotzdem dabei. Die längste Zeit beansprucht immernoch das Schreiben der Datensätze in die neue Datei, das habe ich denke ich aber auch optimiert... viel mehr geht da glaube ich nicht.

    Ein kleines Beispiel:
    Ich habe Excel Dateien mit insgesamt 393.193 Datensätzen zusammengefügt und dafür 11:41,340 Minuten gebraucht.
    Geändert von CShark (13.12.11 um 14:27 Uhr)
     

Ähnliche Themen

  1. Excel API - Sheets übergeben
    Von airBullmer im Forum Java Grundlagen
    Antworten: 13
    Letzter Beitrag: 31.01.11, 15:25
  2. Excel Sheets auslesen
    Von Soilder im Forum Visual Basic 6.0
    Antworten: 17
    Letzter Beitrag: 21.07.10, 12:39
  3. [Excel/VBA] Dynamisch Hyperlinks zu Sheets erstellen
    Von timgkeller im Forum Office-Anwendungen
    Antworten: 3
    Letzter Beitrag: 03.09.08, 09:16
  4. ASP.NET, C#: Excel Sheets einlesen und wieder exportieren
    Von silmepurpurdrache im Forum .NET Web und Kommunikation
    Antworten: 5
    Letzter Beitrag: 28.08.07, 19:36
  5. VBA Excel - Mehrere Sheets kopieren
    Von Doni im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 23.12.04, 17:09