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
}
Run Code Online (Sandbox Code Playgroud)
使用获取红色下划线并说"'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
}
Run Code Online (Sandbox Code Playgroud)实施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();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
35740 次 |
| 最近记录: |