I am trying to open an (hundreds actually) excel file(s). I open the application but want to use the Using() functionality around each of the workbooks I open. Why is this resulting in an error?
using (Excel.Workbook wbXL = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly))
{
//stuff with wbXL
}
using gets the red underline and says “‘Microsoft.Office.Interop.excel.Workbook’:Type used in a using statement must be implicitly convertible to ‘System.IDisposable’.
How to make this work?
Pretty much what it says – you can only use
usingwith classes that implement IDisposable, so that under the covers the compiler knows which function to call on finalisation –yourclass.Dispose(). The Excel interop classes don’t implement this.So you’ve got two choices:
Write your own wrapper class for Excel.Workbook that implements IDispose and either exposes the object itself to call methods on, or wraps those methods too, e.g.
Implement
usingyourself, e.g.