2 Stimmen

Kopieren Sie die Excel-RangeSelection in ein Array in der Windows-Anwendung

Danke im Voraus für jede Hilfe :)

Kontext Ich verwende SpreadsheetGear innerhalb meiner Windows-Anwendung und es gibt bestimmte Fälle, in denen ein Benutzer Daten aus einer geöffneten Excel-Anwendung kopieren und das zweidimensionale Raster in das SpreadsheetGear-Objekt meiner Anwendung einfügen möchte.

Motivation Ich versuche, Informationen aus den Daten in der Zwischenablage zu erhalten, um mich auf das Einfügen vorzubereiten. Es muss bestimmt werden, wie viele Zeilen und Spalten der eingehenden Daten vorhanden sind, bevor das Einfügen erfolgt, damit die SpreadsheetGear-Steuerung und andere Steuerelemente auf der Seite für die Daten "bereit" sind.

Problem 1 Wie kann ich solche Daten aus der Zwischenablage abrufen? Ich benutze

System.Windows.Forms.Clipboard.GetData(...)

aber ich bin mir nicht sicher, ob ich den DataFormat als CommaSeparatedValue (CSV) oder Text angeben sollte. Welcher Weg ist am besten? Gibt es ein anderes DataFormat, das ich übersehe und das mir helfen könnte?

Problem 2 Ich habe diese Anweisung im Immediate-Fenster von Visual Studio 2012 verwendet:

System.Diagnostics.Debug.WriteLine(Clipboard.GetText())

Interessanterweise wurde ein Teil der Daten zurückgegeben, die ich in Excel ausgewählt und kopiert habe. Gibt es eine Begrenzung für die Menge an Daten, die die Zwischenablage von Excel verarbeiten kann? Oder gibt es eine Möglichkeit für meine Windows-App, mehr Platz in der Zwischenablage zuzuweisen, wenn der Benutzer Daten aus Excel auswählt und diese Daten in die Zwischenablage kopiert?

Bitte lassen Sie mich wissen, wenn ich weitere Klarstellungen geben kann. Ich bin etwas verloren und unsicher hinsichtlich des Umfangs dieses Problems. Danke!

2voto

Jake Smith Punkte 1819

Hier ist, was für mich funktioniert hat:

 versuchen
{
    var data = Clipboard.GetDataObject();
    var stream = (System.IO.Stream)data.GetData(DataFormats.CommaSeparatedValue);
    var enc = new System.Text.UTF8Encoding();
    var reader = new System.IO.StreamReader(stream, enc);
    string data_csv = reader.ReadToEnd();
    string[] data_csv_array = data_csv.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    ...
}
fang (Ausnahme e)
{
    ErrorHandling.ShowError("Es liegen keine Daten in der Zwischenablage zum Einfügen vor.");
}

Das "..." zeigt an, dass ich etwas ziemlich Spezifisches mit den Daten mache, sobald sie in Array-Form vorliegen. Was ich tun wollte, war der Teil meiner Lösung zu zeigen, der Menschen im Allgemeinen mit einem ähnlichen Bedürfnis helfen würde.

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