Laden...

Excel Performance steigern

Erstellt von Vassili vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.261 Views
Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren
Excel Performance steigern

Hallo leute,

Ich habe ein kleines Problem mit meiner Excel Export Funktion in meinem Programm.

Ich habe eine DataTable mit ca. 19000 Zeilen und 15 Spalten.

DataTable ItemTable = _dtSet.Tables["Items"];
Excel.ApplicationClass excel = new Excel.ApplicationClass();
excel.Application.Workbooks.Add(true);
Application.DoEvents();
this.Enabled = false;
for (int i = 0; i < ItemTable.Columns.Count; i++)
{
	excel.Cells[1, i + 1] = ItemTable.Columns[i].ColumnName;
	for (int b = 0; b < ItemTable.Rows.Count; b++)
	{
		excel.Cells[b + 2, i + 1] = ItemTable.Rows[b][i];
	}
}

excel.Visible = true;
this.Enabled = true;

Wie man sieht greif ich auf alle Zellen zu. Gibt es da eine perfomantere Lösung?

Benutze VS 2005 und Office 11
Verweise: Excel, Microsoft.Office.Core, VBIDE. Alles ActiveX

3.728 Beiträge seit 2005
vor 18 Jahren
Ado.net

Über den Excel OLEDB Datenprovider kannst auf Excel zugreifen, wie auf eine Datenbank. Das dürfte um einiges schneller sein, als die müde COM-Fernsteuerung.

So wirds gemacht:

http://www.microsoft.com/germany/msdn/library/net/adonet/ExcelUndADONET.mspx

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Werde ich mir gleich mal anschauen. Hoffentlich brauch ich dann keine 45min für mein DataTable

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Ich brauche nach Angabe der Site das JET um auf Excel Dateien zuzugreifen.

Ich habe nach dem JET gesucht. Hab xp und auch die aktuelle Version. aber wie binde ich die in mein vs ein?

S
1.047 Beiträge seit 2005
vor 18 Jahren

Steht doch auf der Seite 😉

Und auch technisch ist der Zugriff auf die Daten einer abgespeicherten Excel-Datendatei (*.xls) auch mit Datenbanktechnologie problemlos machbar. Dazu braucht man nicht viel mehr als den passenden OLE DB-Provider für ODBC, im Beispiel mit der
>
geliefert. Er greift auf den ODBC-Treiber für Microsoft Excel zu, der ab Windows 2000 bereits vorinstalliert ist. Für Windows 9x/Me und Windows NT 4.0 kann der Treiber mit der Jet Engine nachgerüstet werden (dafür benötigen Sie zuvor auch die
>
).

Für den Zugriff auf die Excel-Daten brauchen Sie nur noch diesen Provider anzusprechen. Der zugehörige Connection-String unterscheidet sich je nach Excel-Version: Ab Excel 97 (Versionsnummer 8.0) verwenden Sie die folgende Variante:

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _   
           "Data Source=C:\MeinWorkbook.XLS;" & _   
           "Extended Properties=""Excel 8.0;"  

Du brauchst nicht extra drauf zu verweisen.
Im ConenctionString sthet ja der Provider drin, der wird dan geladen. Ist er nicht auf dem System installiet gibts ne Fehlermeldung.
Links zu den Treibern sind im Text. Sollte naber bei aktuellem Windows dabei sein.

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Wenn ich mit System.Data.OleDb nicht auf dem richtigen Weg bin, dann sag mir bitte, wie ich dann auf meine excel datei zugreife.

3.728 Beiträge seit 2005
vor 18 Jahren
Oledb

Du bist auf dem reichtigen Weg. Das Wort "Provider" ist mehrfach belegt. Es gibt OLEDb-Provider, ODBC-Treiber (die manchmal auch Provider) gennant werden und natürlich die Datenprovider des .NET Frameworks. Davon darf man sich nicht durcheinanderbringen lassen.

Du brauchst nur eine System.Data.OleDb.OleDbConnection um auf Deine Excel-Daten zugreifen zu können. Wichtig ist der ConnectionString. Den musst Du wie im MSDN-Artikel beschrieben aufbauen.

Wenn die Verbindung steht, kannst Du per OleDbCommand oder per OleDbDataAdapter Daten aus Excel abrufen.

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

ich hab heute damit ein wenig rumgespielt. Hatte anfangs probleme gehabt die sql's zu erstellen. ich brauch ja nur ein export. Hab also mit create table und insert into die daten abgespeichert. Zeit reduktion von ~45min in ~2 - 3 min. Das macht doch was her.

Vielen Dank für den Tipp mit der OLE