DateTime-Format stimmt nicht beim Importieren aus Excel-Tabelle überein

8

Ich importiere Daten aus einem Excel-Blatt mit dem folgenden Code in ein DataTable :

%Vor%

Ich habe eine Date -Spalte in der Excel-Tabelle im Format dd/MM/yyyy . Der obige Code schlägt fehl, wenn das Datum dd/MM/yyyy ist (zB 27/12/2009 ). Wie spezifiziert man das Datumsformat?

BEARBEITEN (Hinzufügen weiterer Details):

Es wirft keine Ausnahme aus. Daten werden bis zur Zeile, in der ein ungültiges DataSet -Format gefunden wurde, in Date importiert. Ich habe das Datum als dd/MM/yyyy in Excel Blatt. Wenn ich mit OleDbDataAdapter importiere, erwartet es das Datum in der Excel-Tabelle in MM/dd/yyyy . Nein, wenn es auf ein Datum wie 27/2/2009 stößt, wird der Import gestoppt, obwohl kein Fehler / keine Ausnahme ausgelöst wird. Ich habe also nur teilweise Ergebnisse in DataTable .

Bitte helfen Sie.

    
devnull 08.06.2009, 13:50
quelle

10 Antworten

4

Das Einlesen von Datums- oder anderen gemischten Daten in der Vergangenheit hat mich mit Excel belohnt.

Es scheint, dass ihr Provider XX Zeilen (abhängig von der Provider-Version) "voraussieht", um festzustellen, welcher Spaltentyp zur Laufzeit ist . Die vorherigen Antworten, die Eigenschaften auf deine Verbindung anwenden, haben mir in der Vergangenheit geholfen, aber nicht helfen, wenn du BLANK-Daten und / oder andere Werte in der Spalte selbst hast - das verwirrt den Excel-Treiber.

Ich empfehle, dass Sie stattdessen FileHelpers oder eine andere Bibliothek eines Drittanbieters verwenden. Die Infragistics Excel Komponente hat mich sehr gut behandelt, während FileHelpers opensource ist.

    
Brett Veenstra 16.06.2009, 14:33
quelle
2

Beim Verknüpfen von Excel-Tabellen in MS Access tritt ein Problem auf, wenn eine Spalte gemischte Datentypen aufweist. Wenn zum Beispiel die erste Zeile in der Spalte "Text" ist und die restlichen Zeilen numerisch sind, werden die numerischen Felder als Text und #Error out formatiert. Ebenso mit Daten und Nicht-Daten in der gleichen Spalte gemischt.

Es gibt einige nette Antworten auf die Antworten, aber hier ist die einfache Lösung, um diese gemischten Datentypen ohne einen Datentyp-Mismatch-Fehler zu lesen:

Fügen Sie " IMEX = 1 " zu Ihrem MS Access SQL hinzu, beispielsweise:

SELECT Typ, Breite, Gewicht

FROM [Excel 8.0; IMEX = 1 ; DATENBANK = C: \ TEMP \ MySpreadsheet.xls] .MyExcelTable

Danke, Brian Jasmer

    
Brian Jasmer 28.07.2009 21:06
quelle
1

Sie können die Informationen zur britischen Kultur verwenden, um das Datum im britischen Format TT / MM / JJJJ

zu analysieren %Vor%

wobei "27/12/2009" Ihr Datumsfeld ist

    
Stephen Binns 08.06.2009 14:36
quelle
0

Wie viele Zeilen haben Sie, und sind alle Zellen in der Datumsspalte gültige Daten? Manchmal identifizieren die OleDB-Routinen eine Spalte fälschlicherweise als Text, wenn die Zellen in den ersten 8 Zeilen Inkonsistenzen aufweisen. (8 ist die Standardanzahl von Zeilen, die gelesen werden, um Datentypen zu bestimmen)

    
John Weldon 08.06.2009 14:32
quelle
0

Vielleicht versuchen Sie, die Datumsspalte in Excel zu formatieren und dann zu importieren?

    
iceangel89 08.06.2009 14:39
quelle
0

Sie sollten überprüfen, ob die aktuelle Kultur, die Sie gerade ausführen, UK-Stildaten unterstützt. Hier finden Sie einen Link, wie Sie dies auf der Thread-Ebene überprüfen und ändern können. Ссылка

Die OleDb-Verbindungszeichenfolge scheint "; Locale Identifier=" zu unterstützen. Ich denke, die eb-GB-Kennung ist 2057 (zitieren Sie mich nicht;)), Sie könnten auch versuchen.

Da die Ausnahmen nicht geworfen werden, denke ich, dass Sie während der Füllung vielleicht die RowUpdated-Ereignisse nach diesem Link ansehen möchten Ссылка .

So wird die Fill-Methode des DataSets ausgeführt. Sie wird in der Zeile beendet, in der ein Problem aufgetreten ist. Unter Verwendung der obigen Ereignisse haben Sie möglicherweise einige Optionen beim Ignorieren der Zeile oder beim Neuformatieren.

    
Matthew Pelser 14.06.2009 09:50
quelle
0

Eine Sache, die Sie immer in Ihrer Verbindungszeichenfolge angeben sollten, ist IMEX = 1:

%Vor%

Es hilft beim Parsen von Spalten, die sowohl Zahlen als auch Strings enthalten. Könnte auch beim Parsen von Datum helfen, aber dann müssten Sie alle Daten manuell mit:

konvertieren %Vor%     
AareP 14.06.2009 10:02
quelle
0

Wie wäre es, das Dataset programmatisch anstatt über einen Datenadapter zu füllen?

%Vor%     
Maslow 16.06.2009 02:41
quelle
0

Sie können diese Funktion verwenden, um das von Ihnen empfangene Datumsformat in dem Format zu formatieren, das Sie benötigen.

Hier ist der Code:

%Vor%     
Hazz 16.06.2009 13:51
quelle
0

Ich hatte auch dasselbe Problem. Die Datumsspalte in der Excel-Tabelle lautet TT / MM / JJJJ. Aber gemäß meinen Systemeinstellungen ist das Datenformat MM / TT / JJJJ. Wenn das Datum beispielsweise 31/07/2013 ist, wird das Feld Datum als leere Zeichenfolge angezeigt.

Das Verwenden von IMEX1 zusammen mit "Microsoft.ACE.OLEDB.12.0" Treiber löste das Problem.

"Provider = Microsoft.ACE.OLEDB.12.0; Datenquelle=" + FilePath + "; Erweiterte Eigenschaften = 'Excel 12.0; HDR = Ja; IMEX = 1;'"

Aber "Provider = Microsoft.Jet.OLEDB.4.0;" + "Datenquelle=" + Dateipfad + "; Erweiterte Eigenschaften = Excel 8.0; IMEX = 1" funktioniert nicht.

    
user2588099 16.07.2013 15:46
quelle

Tags und Links