65.9K
CodeProject 正在变化。 阅读更多。
Home

处理 Excel 对象

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.71/5 (4投票s)

2007年9月26日

CPOL

1分钟阅读

viewsIcon

26635

downloadIcon

138

本文概述了大多数开发人员在处理 Excel 对象时遇到的问题。在这里,您将找到可以帮助在不再需要时从内存中清除 Excel 对象代码。

引言

本文重点介绍了一小段代码,实际上模拟了 EndTask 函数。通过使用它,我们可以在完成对象使用后强制结束 EXCEL.EXE 进程。

背景

使用 MS Office Excel 2003 及更早版本创建的 Excel 对象基本上是 COM 对象。当我们从代码实例化一个对象时,它会在系统进程中创建一个 EXCEL.EXE 进程。这对应于 Excel 的单个实例。 .NET CLR 不负责释放 COM 对象。它所能做的就是减少 COM 对象的引用计数,然后由 GC 清除,而 GC 又不受开发人员控制,因为 GC 可以在任何时候运行。因此,没有办法立即从内存中释放 Excel 对象。一旦任务管理器中出现许多 EXCEL.EXE,就可能导致内存不足错误。

使用代码

我们将使用 user32.dllEndTask 方法来模拟结束任务功能,这将从内存(任务管理器)中释放 EXCEL.EXE

您需要按照以下方式导入 EndTask 方法

//method import
Private Declare Function EndTask Lib "user32.dll" Alias _
                "EndTask" (ByVal hwnd As Long) As Long
    //Getting the window handle for the excel
    If (objExcel.Version) < "10.0" Then
        iHandle = FindWindow(Nothing, ObjExcel.Caption)
    Else
        iHandle = objExcel.Parent.Hwnd
    End If

    //Calling the EndTask Method
    intResult = EndTask(iHandle)

关注点

您不需要任何特殊权限即可访问 EndTask 方法。因此,如果您可以创建 Excel 对象,则可以使用这段代码非常轻松地销毁它。

© . All rights reserved.