gpt4 book ai didi

关闭 vb.net 应用程序后 Excel 仍在运行

转载 作者:行者123 更新时间:2023-12-04 20:04:55 26 4
gpt4 key购买 nike

我在关闭 Excel 文件时遇到了一些问题。我正在做一个程序,它打开一些 Excel 文件,使用这些信息然后关闭它们。
我尝试了一些不同的代码,但它们不起作用,因为 EXCEL进程仍在运行。

我的第一个代码:

Dim aplicacaoexcel As New Excel.Application
Dim livroexcel As Object
Dim folhaexcel As Excel.Worksheet

livroexcel = aplicacaoexcel.Workbooks.Open("C:\Users\LPO1BRG\Desktop\Software Fiabilidade\Tecnicos.xlsx", UpdateLinks:=False, ReadOnly:=False, Password:="qmm7", WriteResPassword:="qmm7")
folhaexcel = livroexcel.sheets("Folha1")

aplicacaoexcel.DisplayAlerts = False
aplicacaoexcel.Visible = False
folhaexcel = Nothing
livroexcel.Close()
livroexcel = Nothing
aplicacaoexcel.Quit()
aplicacaoexcel = Nothing

然后我添加了这个: System.GC.Collect()但它仍然没有关闭 Excel 进程。

现在我正在尝试这个:
Dim process() As Process = system.Diagnostics.Process.GetProcessesByName("EXCEL")

For Each p As Process In process
p.Kill()
Next

实际上,这个正在工作,但它关闭了所有 Excel 文件(即使是那些没有被我的程序打开的文件)。

我可以做些什么来关闭我的程序打开的 Excel 文件? :)

最佳答案

发布Excel.Application与其他 Office Interop 对象相比,Interop COM 对象有点棘手,因为有些对象是在您不知情的情况下创建的,并且必须在主应用程序真正关闭之前释放它们。

这些对象包括:

  • The Excel.Application
  • The Excel.Application.WorkBooks collection
  • The WorkBooks collection opened WorkBook
  • The WorkBook Sheets collection
  • The Sheets collection referenced Worksheet


这些对象必须全部释放才能终止 EXCEL 进程。

一个简单的解决方案是对所有 COM 对象使用显式声明/赋值:
Dim ExcelApplication As New Microsoft.Office.Interop.Excel.Application()
Dim ExcelWorkbooks As Workbooks = ExcelApplication.Workbooks
Dim MyWorkbook As Workbook = ExcelWorkbooks.Open("[WorkBookPath]", False)
Dim worksheets As Sheets = MyWorkbook.Worksheets
Dim MyWorksheet As Worksheet = CType(worksheets("Sheet1"), Worksheet)

完成后,将它们全部释放:
Imports System.Runtime.InteropServices

Marshal.ReleaseComObject(MyWorksheet)
Marshal.ReleaseComObject(worksheets)

MyWorkbook.Close(False) '<= False if you don't want to save it!
Marshal.ReleaseComObject(MyWorkbook)

ExcelWorkbooks.Close()
Marshal.ReleaseComObject(ExcelWorkbooks)

ExcelApplication.Quit()
Marshal.FinalReleaseComObject(ExcelApplication)

Marshal.CleanupUnusedObjectsInCurrentContext()

关于关闭 vb.net 应用程序后 Excel 仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50389311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com