Ich versuche, eine (Hunderte tatsächlich) Excel-Datei (en) zu öffnen. Ich öffne die Anwendung, möchte aber die Using () -Funktionalität für jede geöffnete Arbeitsmappe verwenden. Warum führt dies zu einem Fehler?
%Vor%using erhält die rote Unterstreichung und sagt "'Microsoft.Office.Interop.excel.Workbook': Der in einer using-Anweisung verwendete Typ muss implizit in 'System.IDisposable' konvertiert werden können.
Wie funktioniert das?
So ziemlich, was es sagt - Sie können using
nur mit Klassen verwenden, die IDisposable implementieren, so dass der Compiler im Hintergrund weiß, welche Funktion bei der Finalisierung aufgerufen wird - yourclass.Dispose()
. Die Excel-Interop-Klassen implementieren das nicht.
Sie haben also zwei Möglichkeiten:
Schreiben Sie Ihre eigene Wrapper-Klasse für Excel.Workbook, die IDispose implementiert und entweder das Objekt selbst für Aufrufmethoden verfügbar macht oder diese Methoden ebenfalls umschließt, z. B.
%Vor% Implementieren Sie using
selbst, z. B.
Jedes Element in einer using
-Anweisung muss die IDisposable
-Schnittstelle implementieren. Ich habe die Dokumentation nicht zur Hand, aber ich denke, Excel.Workbook
implementiert diese Schnittstelle nicht.
using-Anweisung (C # -Referenz) :
Bietet eine praktische Syntax, die die korrekte Verwendung von gewährleistet IDisposable Objekte.
Excel.Workbook
implementiert IDisposable
nicht, daher können Sie using
nicht dafür verwenden ..
Sie können es nicht funktionieren lassen.
Der Block using
wird verwendet, um Ressourcen von Objekten freizugeben, die die Schnittstelle IDisposable
so schnell und so sicher wie möglich implementieren.
Excel.Workbook
implementiert IDisposable
nicht, sodass Sie es nicht zur Verwendung in einem using
-Block deklarieren können.