4 Stimmen

Analysieren eines "Ausschneidens und Einfügens" aus Excel

Für einen Teil einer Webanwendung muss der Benutzer einige Daten aus einer Tabellenkalkulation importieren. Zum Beispiel eine Liste von Namen und E-Mail-Adressen. Derzeit tun wir dies, indem wir den Benutzer auffordern, eine CSV-Datei zu suchen und hochzuladen.

Leider ist dies nicht immer möglich, da verschiedene IT-Systeme in Unternehmen den Benutzern nur den Zugriff auf Dateien aus Dokumentenmanagementsystemen gestatten und sie keine Berechtigung haben, diese auf einem lokalen Laufwerk oder einer Netzwerkfreigabe zu speichern.

Die Lösung, die wir haben, besteht darin, dem Benutzer zu erlauben, das gesamte Blatt (CSV) auszuschneiden und in einen Textbereich einzufügen und diesen zu übermitteln. Auf diese Weise erhalten Sie eine schöne tabulatorgetrennte Liste der Daten, die wie unten dargestellt leicht analysiert werden kann.

Lorem   ipsum   dolor   sit amet
consectetur adipiscing  elit    Vivamus fermentum
Vivamus et  diam    eu  eros
egestas rutrum  Morbi   id  neque
id  enim    molestie    tincidunt   Nullam

Leider können verschiedene Zellen zu unerwarteten Ergebnissen führen. Im folgenden Satz sehen Sie ein " bei dem Wort Prerium, einen Tabulator bei dem Wort Suspendisse und einen Zeilenumbruch bei dem Wort Sollicitudin.

bibendum    ante    molestie    lectus  Sed
pret"ium    "Susp   endisse"    "sollic
itudin" nisi    at
urna    Sed sit amet    odio
eu  neque   egestas tincidunt   Nunc
metus   Curabitur   at  nibh    Nulla

In diesem Fall kann ich nicht einfach auf Tabulatoren und Zeilenumbrüche aufteilen, ohne einen verbesserten Mechanismus, um mit den Tabulatoren, Anführungszeichen und Zeilenumbrüchen innerhalb der eigentlichen Daten umzugehen.

Kennt jemand einen Code, der dies zuverlässig bewerkstelligen kann? Oder sogar, ob man sich auf Excel und die Zwischenablage verlassen kann, um konsistente Ergebnisse zu erzielen?

Ich arbeite in Asp.net 3.5 mit C#. Die Excel-Version der Benutzer kann variieren, sollte aber immer Windows 2000/XP/Vista und IE 6/7 sein.

1voto

csgero Punkte 2753

Dies sieht für mich wie eine Liste mit "getrennten Werten" aus, also im Grunde wie CSV mit TAB als Feldbegrenzer und Zeilenumbruch als Zeilentrenner. Sie könnten es mit der Option CSV-Reader-Bibliothek von CodeProject sollte es mit verschiedenen Trennzeichen umgehen können, nicht nur mit Kommas.

0voto

abatishchev Punkte 94886

Versuchen, etwas Hilfreiches zu finden in System.Windows.Forms.Clipboard-Mitglieder

0voto

Luke Punkte 2917

Ich habe eine Lösung mit Einfügen von CSV-Dateien gesehen, die immer die Daten aus der Zwischenablage in der IDataObject, und dann lesen jede Zeile der CSV in ein Datenobjekt mit einem StreamReader mit der IDataObject.GetData("Csv") beteiligt

Dies wäre wahrscheinlich etwas zuverlässiger, als die CSV-Datei in ein Textfeld einzufügen und sie dann in ein anderes Datenobjekt zu packen.

Leider habe ich keinen Beispielcode, ich werde versuchen, dies zu bearbeiten, wenn ich etwas Zeit habe und es ausprobiere.

0voto

Mike Woodhouse Punkte 50241

Nach einer kurzen Überprüfung ist es möglich, einen Excel-Zellenwert zu erstellen, der einen Tabulator enthält (versuchen Sie ="abc"&CHAR(9)&"def" und kopieren Sie die Zelle in einen HTML-Textbereich) und ein oder mehrere Anführungszeichen (z. B. ="this has""one quote" ). Ich sehe keinen absolut sicheren Weg, um sicher zu sein, was man bekommt.

Das Problem ist, dass Sie keine wirkliche Kontrolle über die Interaktion zwischen Excel (als Quelle) und dem Textbereich im Browser (als Einfügeziel) haben. Ich bin mir nicht einmal sicher, ob das Ergebnis in verschiedenen Browsern unbedingt dasselbe ist!

Ich frage mich, ob es nicht eine Möglichkeit gibt, dies über eine Zwischenanwendung besser zu handhaben, die einen umfangreicheren Austausch der Zwischenablage mit Excel aushandeln kann, so dass ein eindeutiges Format an den Browser geliefert werden kann. Ich weiß, dass das nicht gerade eine nahtlose Benutzererfahrung ist, aber wenn man sich mit der Technologie befasst, stellt man schnell fest, dass das Kopieren und Einfügen zwischen Anwendungen wirklich sehr einfach ist. hart .

In Anbetracht der Tatsache, dass schlecht geformte Daten die Ausnahme sein sollten, denke ich, dass ich einen Parser für den "normalen" Fall schreiben würde (man könnte es wahrscheinlich mit einem oder zwei regulären Ausdrücken machen) und die geparsten Daten dem Benutzer zur Bestätigung vorlegen, mit der Möglichkeit, Zeilen zu bearbeiten, die nicht richtig geparst wurden. Mit ein wenig Ajax Magie, würde ich vermuten, Sie könnten etwas ziemlich glatt liefern.

0voto

JaganY Punkte 73

Sie können die Klasse TextFieldParser verwenden, die Microsoft bereits anbietet: http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio(v=vs.110).aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X