Frage

Ich versuche, einige Daten aus einer LINQ-Abfrage in C # in ein Excel-Geschwindigkeit Blatt zu senden mit OLE

Ich habe eine Abfrage wie folgt:

Var data = from d in db.{MyTable}
           where d.Name = "Test"
           select d;

ich das Excel OLE-Objekt habe gut funktioniert, ich kann einfach nicht herausfinden, wie mit den Daten aus der LINQ-Abfrage, die Zellen in Excel zu füllen.

. PS: Ich verwende Excel 2003, wenn das einen Unterschied macht

Kann mir jemand helfen mit diesem?

War es hilfreich?

Lösung

Senden von einzelnen OLE-Befehle für jede Excel-Zelle ist sehr langsam, so ist der Schlüssel ein Objekt Array wie folgt zu erstellen:

int noOfRows = data.Count - 1;
int noOfColumns = mydataclass.GetType().GetProperties().Count() - 1;
Object[noOfRows, noOfColumns] myArray;

ein Objekt Array Senden können Sie eine Mischung von Datentypen senden z.B. string, integer, Datum etc. Wenn Sie jedoch wissen, dass die Daten alle Text ist zum Beispiel, kann man einfach ein String-Array senden.

Das Array muss aus der Abfrage gefüllt werden entweder durch jeden einzelnen Wert zuweisen oder vielleicht durch Reflexion unter Verwendung der Daten Objekteigenschaften zu erhalten. Dann können Sie das Array in Excel wie folgt an:

XLOLESheetobj.Range("A1","Z20").Value = myArray;

Sie können Z20 ersetzen mit der Anzahl der Spalten -> Char + die Anzahl der Zeilen -> string.

Andere Tipps

Ich nehme an, Sie verwenden OLE nicht in einem Web-Szenario, denn es wird schließlich scheitern.

Wenn Sie nur Rohdaten benötigen, können Sie auf tabulatorbegrenzter Textdatei Dump kann:

var lines = data.Select (d => d.Name + '\ t' + d.AnotherProperty + ...);

Ihre beste Möglichkeit ist, mit dem Excel XML-Format. Ich habe eine Blog-Post auf, wie das erreichen: http: //www.aaron -powell.com/blog.aspx?id=1237

Sie sind andere Option wäre am LINQ-Anbieter für Excel suchen - http: //www.codeplex. com / xlslinq .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top