Mal wieder Excel und LateBinding
-
Dienstag, 5. Februar 2013 09:28
Hallo,
ich möchte mittels
object UsedRange = Sheet.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, Sheet, null); object[,] tmp = (object[,])UsedRange.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, UsedRange, null);den formatierten Text (z.B. auch Postleitzahl mit formatierter, führender Null) eines gesamten Sheets in ein Array einlesen. Leider bekomme ich beim Aufruf die Fehlermeldung, das System.DBNull nicht in object[,] umgewandelt werden kann. Greife ich statt dessen auf die "Value" zu, funktioniert alles, nur das eben die Formatierung der Zellen nicht mitgelesen wird. Wie kann ich das lösen?
Für Eure Tipps dankend,
Klaus
No Brain - No Pain
- Bearbeitet Klaus Mayer Dienstag, 5. Februar 2013 09:31
Alle Antworten
-
Dienstag, 5. Februar 2013 13:17Moderator
Hallo Klaus,
Das ist Excel-Standardverhalten. Range.Text funktioniert eben anders als Range.Value. Range.Text gibt keinen Werte-Array zurück, sondern einen einzelnen Wert (vorausgesetzt alle Zellen haben den gleichen Wert). Wenn auch nur eine der Zellen im Range einen anderen/anders formattierten Text enthält, oder gar nichts, wird DBNull zurückgegeben. Beim Casten von DBNull auf object[,] wird dann die von dir festgestellte InvalidCastException geworfen. Vorschlag: Du könntest in einer Schleife über Range.Cells das Range-Objekt für jede einzelne Zelle ermitteln und entweder Range.Text der einzelnen Zelle auswerten oder über NumberFormat die aktuelle Formatierung ermitteln.
Gruß
Marcel- Als Antwort markiert Klaus Mayer Mittwoch, 6. Februar 2013 08:58
-
Dienstag, 5. Februar 2013 13:28
Hallo Marcel,
das ist Mist! ;-) Eine Schleife fällt aus Geschwindigkeitsgründen aus. Dauert ewig bei >= 50.000 Zeilen mit 5-8 Spalten. Da hilft dann alles nix, müssen die Sachbearbeiter die Daten eben doch entsprechend liefern. Wollte halt mal die liebe Datenschlampe sein und den Leuten etwas Arbeit abnehmen :-)
DANKE! für Deinen Tipp und schöne Grüße,
Klaus
No Brain - No Pain
-
Dienstag, 5. Februar 2013 13:54Moderator
Hallo Klaus,
Ja, Pech gehabt mit deinem Ansatz. Wenn eure Sachbearbeiter nicht nachts arbeiten ;-) könnte man die Verarbeitung denn vielleicht zeitlich versetzen?
Für die Bearbeitung großer Datenmengen könnte ich euch noch die FlexCel-Komponente empfehlen. Sie arbeitet SEHR schnell (weil nicht über COM) und zuverlässig und kostet nicht die Welt.Gruß
Marcel -
Mittwoch, 6. Februar 2013 08:58
Hallo Marcel,
zeitlicher Versatz geht leider nicht. Muss alles (wie immer) möglichst just in time passieren :-( Die FlexCel-Komponente schaue ich mir mal an. Preis ist ja völlig ok.
Danke Dir! und schöne Grüße,
Klaus
No Brain - No Pain

