Bra*_*rad 8 c# excel interop using
我正在尝试打开一个(实际上有数百个)excel文件.我打开应用程序但想要在我打开的每个工作簿周围使用Using()功能.为什么会导致错误?
using (Excel.Workbook wbXL = appXL.Workbooks.Open(_sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly))
{
    //stuff with wbXL
}
使用获取红色下划线并说"'Microsoft.Office.Interop.excel.Workbook':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'.
如何使这项工作?
Rup*_*Rup 30
几乎就是它所说的 - 你只能使用using实现IDisposable的类,因此编译器知道在最终化时调用哪个函数 - yourclass.Dispose().Excel互操作类不实现此功能.
所以你有两个选择:
为实现IDispose的Excel.Workbook编写自己的包装类,并将对象本身暴露给调用方法,或者包装这些方法,例如
public class DisposableWorkbook : IDisposable
{
    private Excel.Workbook _workbook = null;
    public DisposableWorkbook(Excel.Application appXL, String path,
                              NotSureOfType otherArgument,
                              Excel.XlFileAccess access)
    {
        _workbook = appXL.Workbooks.Open(path, otherArgument, access);
    }
    public Excel.Workbook Workbook
    {
        get { return _workbook; }
    }
    public void Dispose()
    {
        if (workbook != null)
        {
            workbook.Close(Excel.XlSaveAction.xlDoNotSaveChanges,
                           workbookToClose);
            workbook = null;
        }
    }
}
using (DisposableWorkbook dwbXL = new DisposableWorkbook(appXL,
          _sourceFullPath, Type.Missing, Excel.XlFileAccess.xlReadOnly))
{
     Excel.Workbook wbXL = dwbXL.Workbook;
     // stuff with wbXL
}
实施using自己,例如
Excel.Workbook wbXL = null;
try
{
    wbxl = appXL.Workbooks.Open(_sourceFullPath, Type.Missing,
                                Excel.XlFileAccess.xlReadOnly);
    //stuff with wbXL
}
finally
{
    if (wbxl != null) wbxl.Close();
}
| 归档时间: | 
 | 
| 查看次数: | 35740 次 | 
| 最近记录: |