在VB .NET中正确处理Interop.Excel的多个实例

时间:2016-01-13 10:20:55

标签: vb.net excel-vba visual-studio-2015 com-interop excel-interop

我的应用程序需要一个Excel来读取,比如说,一个类中有两个不同的函数。

我有一个读取标题并将它们保存到.txt文件,一个用于读取数据并将其放入我的DataGridView

据我所知,Interop.Excel是处理excel文件的最佳方式,我将在我的程序中打开但不幸的是我留下了一些相当长的重复代码。

目前每个班级都包含以下代码:

Dim exApp = New Excel.Application
        Dim exWB = exApp.Workbooks.Open(myFilePath)
        Dim exWS = exWB.Sheets(1)
        ** Some statements run here **
        exApp.Quit()
        exApp = Nothing
        exWB = Nothing

如果我只有两个函数,但是如果我喜欢5,那么这不是一个问题,这似乎是一个长时间保持打开和关闭Excel对象的方法。

处理要使用的excel对象而不是关闭和重新打开的最佳或更有效的方法是什么?

我已经尝试在我正在使用的类中初始化Excel对象但是在尝试从函数中关闭它时会出现错误,说它是不允许的。 我还尝试创建一个CloseExcel()函数,该函数通过ByRef传递要关闭的excel对象,但是我得到了同样的错误。

任何想法或讨论都将不胜感激。

非常感谢!

1 个答案:

答案 0 :(得分:0)

你如何描述它要复杂得多。 我可以给你一些关于如何编写应用程序的一般要点:

创建一个包装类ExcelWrapper,例如,它将是唯一一个将处理excel的类。其他类(例如业务层中的类)将实例化ExcelWrapper(而不是Excel)类型的对象。

这堂课将:

  • 在构造函数中实例化excel.application对象
  • 有一个方法可以从excel中读取您需要的所有内容,并将数据返回给任何调用它的人。例如,您可以返回一个DataTable来填充datagridview。
  • 有另一种方法来读取标题并将信息作为字符串返回(取决于标题中的内容)
  • 关闭打开的文档和应用程序的close excel方法
  • 您需要实现IDisposable模式才能正确清理interop excel对象,GC无法执行此操作,因为它是非托管代码。

对于上述每一项,您都可以在互联网上找到很多例子。