【问题标题】:Correct handling of Multiple instances of Interop.Excel in VB .NET在 VB .NET 中正确处理 Interop.Excel 的多个实例
【发布时间】:2016-01-13 10:20:55
【问题描述】:

我的应用程序需要一个 Excel 才能被一个类中的 2 个不同函数读取。

我有一个读取标题并将它们保存到 .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 对象,但我得到了同样的错误。

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

非常感谢!

【问题讨论】:

  • “我收到错误”不是恰当的问题描述。

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


【解决方案1】:

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

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

本课程将:

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

对于以上每一项,你可以在网上找到很多例子。

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多