EXCEL进程无法退出,网上找的代码都不行,急急急急急急急急急急急急急急急急急急急急急急!!!

slujun 2007-12-17 07:31:00
我写了一个类库,关于编辑EXCEL文档的方法,但是同样的一个函数在form上调用完后任务管理器中(调试出了方法后)没有EXCEL进程驻留,但是WEB上调用后任务管理器中(同样的断点)EXCEL进程还在,百思不得其解,请高手帮忙看一下代码,代码如下:
Imports System
Imports System.Text
Imports System.Collections
Imports System.IO
Imports System.DiagnosticsImports Microsoft.Office.Interop
Public Class ExcelPrint
Public Sub New(ByVal strPath As String)
path = strPath
End Sub
Public Function print111()
Dim xl, xlx As Object
Dim xlbook As Object
Dim pApp, i As Integer
xl = CreateObject("Excel.Application")
xl.Visible = False
'With xl
pApp = System.GC.GetGeneration(xl)


Dim file As String
file = path & "\aaa.xls"
xlbook = xl.Workbooks.Add(file)

Dim xlsheet As Object
xlbook.Sheets(1).Activate()
xlsheet = xlbook.activesheet

For i = 1 To 10
xlsheet.Cells(2, i) = i.ToString()
Next


'删除文件代码略,我每次运行都把目录下的aaa1.xls文件手动删除
xlbook.SaveAs(path & "\aaa1.xls")
xlsheet = Nothing
xlbook.Close()
'xl.Quit()
xlbook = Nothing

If Not xl Is Nothing Then
xl.Quit()
xl = Nothing
End If
'End With
System.GC.Collect(pApp)

End Function

End Class

web调用代码:ExcelPrint excelPrint=new ExcelPrint(Page.MapPath("")+@"\..");
excelPrint.print111();
Form调用代码:ExcelPrint excelPrint=new ExcelPrint(Application.StartupPath);
excelPrint.print111();
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
slujun 2007-12-20
  • 打赏
  • 举报
回复
看来真的是没有解决办法了,我只有杀进程了,这样只能希望没有两个用户同事开EXCEL,谢谢大家了。
patann 2007-12-18
  • 打赏
  • 举报
回复
up.............
ChengKing 2007-12-18
  • 打赏
  • 举报
回复
杀它:

'杀死Excel进程
Dim myproc As System.Diagnostics.Process = New System.Diagnostics.Process
Dim proc As Process
Dim procs() As Process = Process.GetProcessesByName("excel") '得到所有打开的进程
Try
For Each proc In procs
If Not proc.CloseMainWindow() Then
proc.Kill()
End If
Next
Catch
End Try

http://blog.csdn.net/chengking/archive/2005/11/29/539514.aspx
SmallWhiter 2007-12-18
  • 打赏
  • 举报
回复
Kill it
xiaoniao_28 2007-12-18
  • 打赏
  • 举报
回复
学习中 。。。
moshuchao 2007-12-18
  • 打赏
  • 举报
回复
几天前才在网上找到的文章。
VB代码如下:
<Runtime.InteropServices.DllImport("User32.dll", CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Shared Function GetWindowThreadProcessId(ByVal hwnd As System.IntPtr, ByRef ID As Integer) As Integer
End Function


''' <summary>
''' 读取excel 文件到一个dataTable 中. 本函数只读取第一个sheet
''' </summary>
''' <param name="fileName">包含完整路径的excel文件名</param>
''' <param name="dt">用来接收结果的dataTable.</param>
''' <param name="errInfo">如果出错, 则该参数返回错误信息</param>
''' <returns>读取成功返回true, 否则返回false</returns>
''' <remarks></remarks>
Public Shared Function ReadExcelFile(ByVal fileName As String, _
ByRef dt As Data.DataTable, ByRef errInfo As String) As Boolean

If IO.File.Exists(fileName) = False Then
errInfo = "file doesn't exist."
Return False
End If

Dim xlApp As Excel.Application
Dim xlWkb As Excel.Workbook
Dim xlSht As Excel.Worksheet

xlApp = DirectCast(CreateObject("Excel.Application"), Excel.Application)
xlApp.DisplayAlerts = False

Try
xlWkb = xlApp.Workbooks.Open(fileName)
xlSht = DirectCast(xlWkb.Sheets.Item(1), Excel.Worksheet)
Catch cex As Runtime.InteropServices.COMException
errInfo = cex.Message
xlSht = Nothing
xlApp.Quit()
xlWkb = Nothing
xlApp = Nothing
Return False
Catch ex As Exception
errInfo = ex.Message
xlSht = Nothing
xlApp.Quit()
xlWkb = Nothing
xlApp = Nothing
Return False
End Try

'excel 文件已经打开, 开始填充dataTable
Dim rowCnt, columnCnt As Integer
rowCnt = xlSht.UsedRange.Rows.Count
columnCnt = xlSht.UsedRange.Columns.Count

dt = New Data.DataTable
Dim dc As Data.DataColumn
Dim dr As Data.DataRow

For i As Integer = 1 To columnCnt
dc = New Data.DataColumn
dt.Columns.Add(dc)
Next


For i As Integer = 1 To rowCnt
dr = dt.NewRow

dr.BeginEdit()
For j As Integer = 1 To columnCnt
dr.Item(j - 1) = xlSht.Cells(i, j).value
Next
dr.EndEdit()

dt.Rows.Add(dr)
Next

'填充完毕, 关闭excel


xlSht = Nothing
xlWkb.Close()
xlApp.Quit()
Dim t As IntPtr = New IntPtr(xlApp.Hwnd)
Dim k As Integer = 0
GetWindowThreadProcessId(t, k)
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessById(k)
p.Kill()
xlSht = Nothing
xlWkb = Nothing
xlApp = Nothing

Return True

End Function
nanjing_chen 2007-12-18
  • 打赏
  • 举报
回复
老兄,你这个问题,我也遇到过,EXCEL进程无法释放,但累加起来的进程并不会对系统造成很大的危险。呵呵,这是懒人的办法,我采用的办法就是,每次在创建之前和使用之后,杀进程,不知道你同意这方法不

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧