?
Um auf die Excel Daten zu zu greifen kannst du z.B. folgendes tun:
List<string> kValues = new List<string>();
Excel.Range kRange = kWorksheet.get_Range( "A3:A10");
if (kRange.Count == 1)
{
kValues.Add( kRange.Value);
}
else if (kRange.Count > 1)
{
foreach (Excel.Range kCell in kRange.Cells)
{
kValues.Add( kCell.Value);
Marshal.ReleaseComObject(kCell);
}
}
Marshal.ReleaseComObject(kRange);
kListView.DataSource = kValues;
Hinweis: JEDES Objekt, dass du von Excel bekommst MUSST du auch von Hand freigeben. Wenn du das nicht machst, wird der Speicher nicht freigegeben (bzw erst, wenn die Anwendung geschlossen wird).
Dazu brauchst du den Namespace System.Runtime.InteropServices.
Da muss man ziemlich gut aufpassen, denn folgendes liefert gleich 2 ComReferenzen:
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Eine Referenz ist das WorkSheet selbst, die 2. Referenz ist die Collection xlWorkBook.Worksheets (vom Typ Excel.Sheets). Diese muss ebenfalls freigegeben werden.
Das bläht den ganzen Code etwas auf. Ist aber auf dauer notwendig.
Excel.Application xlApp = new Excel.ApplicationClass();
Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
Excel.Workbook xlWorkBook = xlWorkbooks.Open(pfad, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Sheets xlWorksheets = xlWorkbook.Worksheets;
xlWorkSheet = (Excel.Worksheet)xlWorksheets.get_Item(1);
// ...
// do stuff with excel
// ...
xlApp.Quit();
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorksheets);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlWorkbooks);
Marshal.ReleaseComObject(xlApp);
Zusätzlich ist noch wichtig zu wissen, das man ReleaseComObject keinen nullpointer übergeben darf. Die Referenzen müssen selbstverständlich auch bei Exceptions Released werden! Da ist besonders drauf zu achten.