On Error Resume Next
创建excel对象
Dim missing As Object = System.Reflection.Missing.Value
Dim oExcel As Excel.Application = New Excel.ApplicationClass
oExcel.Visible = False
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
oBook = oExcel.Workbooks.Open(Server.MapPath("/a.xls"))
oSheet = oBook.ActiveSheet
--------------------------------------------------------------------------------
连接并向oSheet对象传数据
Dim conn As New SqlClient.SqlConnection(数据库连接)
Dim da As New SqlClient.SqlDataAdapter("", conn)
Dim ds As New DataSet
da.SelectCommand.CommandText = "select * from table"
da.Fill(ds, "table_list")
Dim li_i as Integer
For li_i = 0 To ds.Tables("table_list").Rows.Count - 1
oSheet.Cells(li_i + 5, 2) = ds.Tables("table_list").Rows(li_i)("id")
Next
ds.Tables("table_list").Clear()
--------------------------------------------------------------------------------
保存
Dim mm As String = Server.MapPath(".") + "\a.xls"
oExcel.ActiveWorkbook.SaveCopyAs(mm)
filename.Text = "a.xls"
--------------------------------------------------------------------------------
释放对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
oSheet = Nothing
oBook.Close(False, Type.Missing, Type.Missing)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
oBook = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
oExcel = Nothing
da.Dispose()
ds.Dispose()
conn.Dispose()
Me.Dispose()
GC.Collect()
KillProcess("EXCEL")
Response.Redirect(filename.Text.Trim)
--------------------------------------------------------------------------------
杀进程
Private Sub KillProcess(ByVal processName As String)
Dim myproc As New System.Diagnostics.Process
Dim thisproc As System.Diagnostics.Process
Try
For Each thisproc In myproc.GetProcessesByName(processName)
If (Not thisproc.CloseMainWindow()) Then
thisproc.Kill()
End If
Next
Catch ex As Exception
Response.Write("<script>alert(" + ex.Message + ");</script>")
End Try
End Sub
请问:
1、我的进程里总会留下一个EXCEL.EXE的进程,怎么样才能杀掉?
2、执行了以上代码,SQL-SERVER的企业管理器在查看数据时出错。
错误提示:存储器不足,无法完成此操作。
但查询分析器可以用。
就这两个问题,看了很多别人对Excel进程的处理,自己就是解决不好,请高手们来帮忙看一下。
出错时Excel出现的死进程出现是一件很头疼的事情。在每个文件前加上“On Error Resume Next”将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到“Application.Quit”,保证每次程序执行完不留下死进程。
你装的office系统有问题。
使用IceSword.exe,先把内存中的Excel清除掉
在运行中输入dcomcnfg
设置Excel组件权限,对aspnet,iuser_机器名,iwam_机器名,VS developer等用户设置权限。
下面這樣可以,我的就是這樣做的(C#):
ExportExcel();//自定義的導出Excel的方法
GC.Collect();//銷毀Excel對象
首先,你不可以用killprocess的方法,因爲該方法會連同用戶自己的excel進程也殺掉;
其次,要釋放com對象,需要賦予asp.net用戶相應的權限;另外,如果要從客戶端訪問本程序,那麽iusr_xx,以及匿名用戶也要有權限;
再次finer已經說了
-----------------
回复人: finer() ( ) 信誉:76 2005-08-09 16:01:00 得分: 0
下面這樣可以,我的就是這樣做的(C#):
ExportExcel();//自定義的導出Excel的方法
GC.Collect();//銷毀Excel對象
-------------------------------------
ExportExcel();與GC.Collect();應該分開來寫.
你的那个kill的方法可以不用的,System.GC.Collect();这个方法是好用的,但是由于它不能回收它自身范围的东西,所以你要把你编辑Excel的代码写成一个方法,在外面套一个大方法,在外面方法的Finally里写上System.GC.Collect();应该就没问题了,绝对经验之谈啊,这个东西以前也困扰了我好长时间,:)