为了账号安全,请及时绑定邮箱和手机立即绑定

使用IDisposable清理ExcelInterop对象

使用IDisposable清理ExcelInterop对象

杨魅力 2019-06-17 16:05:55
使用IDisposable清理ExcelInterop对象在我的公司中,发布ExcelInterop对象的常见方法是使用IDisposable,方法如下:Public Sub Dispose() Implements IDisposable.Dispose     If Not bolDisposed Then         Finalize()         System.GC.SuppressFinalize(Me)     End IfEnd SubProtected Overrides Sub Finalize()     _xlApp = Nothing     bolDisposed = True     MyBase.Finalize()End Sub哪里_xlApp以下列方式在构造函数中创建:Try     _xlApp = CType(GetObject(, "Excel.Application"), Excel.Application)Catch e As Exception     _xlApp = CType(CreateObject("Excel.Application"), Excel.Application) End Try客户端使用using-statement执行有关EXCEL互操作对象的代码。我们完全避免使用二点规则..现在,我开始研究如何重新分配(Excel)Interop对象,以及几乎所有关于它的讨论,比如如何正确清除excel互操作对象或释放Excel对象主要使用Marshal.ReleaseComObject(),没有一个使用IDisposable接口。我的问题是:使用IDisposable Interace来释放EXCEL互操作对象有什么缺点吗?如果是的话,这些残疾的优点是什么。
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如果你在寻找一种更清洁的方法,你可以用库格拉..这并不是什么额外的开销(只有两个DLL必须包含在您的参考文件中),您也不必处理隐式垃圾收集。

下面的代码是从EXCEL文件中读取10行10列所需的EXCEL 32Excel.exe留下的进程。我一个月前就有过这个问题写了关于怎么做的说明。比直接处理ExcelInterop要容易得多,也要干净得多。

Koogra.IWorkbook workbook = Koogra.WorkbookFactory.GetExcel2007Reader("MyExcelFile.xlsx");
Net.SourceForge.Koogra.IWorksheet worksheet = workbook.Worksheets.GetWorksheetByName("Sheet1");
//This will invididually print out to the Console the columns A-J (10 columns) 
for rows 1-10.for (uint rowIndex = 1; rowIndex <= 10; rowIndex++){
    for (uint columnIndex = 1; columnIndex <= 10; columnIndex++)
    {
        Console.WriteLine(worksheet.Rows.GetRow(rowIndex).GetCell(columnIndex).GetFormattedValue());
    }}


查看完整回答
反对 回复 2019-06-17
  • 2 回答
  • 0 关注
  • 425 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信