Ich importiere Daten aus einem Excel-Blatt mit dem folgenden Code in ein DataTable
:
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.
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.
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
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
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)
Vielleicht versuchen Sie, die Datumsspalte in Excel zu formatieren und dann zu importieren?
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.
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%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%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.
Tags und Links c#