我的开发环境是visual studio.net 2003,office 2003
在不同的系统环境下执行代码,结果却不同,到现在也没有一个十分理想的解决办法。
问题如下:客户端点击按钮,执行如下代码Dim xlsApp As Microsoft.Office.Interop.Excel.Application
Dim xlsWorkBook As Microsoft.Office.Interop.Excel.Workbook
xlsApp = New Microsoft.Office.Interop.Excel.ApplicationClass
Try
xlsWorkBook = xlsApp.Workbooks.Open("c:\test.xls", 2, False) xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).merge()
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).font.size = 20
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).font.bold = True
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).FormulaR1C1 = "Test" xlsWorkBook.SaveAs("c:\print" & Request.UserHostName() & ".xls")
xlsWorkBook.Close(False)
xlsWorkBook = Nothing
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
xlsApp = Nothing
GC.Collect()Catch ex As Exception xlsWorkBook.Close(False)
xlsWorkBook = Nothing
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
xlsApp = Nothing
GC.Collect()End Try执行后,在c:根目录下生成了一个print127.0.0.1.xls文档win2000 professional:excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程,
如此下去,excel进程会越来越多;
excel进程无法手动关闭,不允许结束进程
win2000 server :excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程;
excel进程可以手动关闭winxp professional :excel进程没有关闭;
第二次点击按钮的时候,系统没有新开一个excel进程,
而是继续使用上次没有关闭的进程;
excel进程可以手动关闭win2003 server :excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程;
excel进程可以手动关闭以上4种情况的共同点是excel进程依然存在,但是只有2000 professional无法手动关闭,只有xp可以继续使用已经存在的excel进程请教原因,并希望高手可以给出解决的办法。System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)似乎没有太大的效果
在不同的系统环境下执行代码,结果却不同,到现在也没有一个十分理想的解决办法。
问题如下:客户端点击按钮,执行如下代码Dim xlsApp As Microsoft.Office.Interop.Excel.Application
Dim xlsWorkBook As Microsoft.Office.Interop.Excel.Workbook
xlsApp = New Microsoft.Office.Interop.Excel.ApplicationClass
Try
xlsWorkBook = xlsApp.Workbooks.Open("c:\test.xls", 2, False) xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).merge()
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).font.size = 20
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).font.bold = True
xlsWorkBook.Worksheets(1).range(xlsWorkBook.Worksheets(1).cells(1, 1), xlsWorkBook.Worksheets(1).cells(6, 2)).FormulaR1C1 = "Test" xlsWorkBook.SaveAs("c:\print" & Request.UserHostName() & ".xls")
xlsWorkBook.Close(False)
xlsWorkBook = Nothing
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
xlsApp = Nothing
GC.Collect()Catch ex As Exception xlsWorkBook.Close(False)
xlsWorkBook = Nothing
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
xlsApp = Nothing
GC.Collect()End Try执行后,在c:根目录下生成了一个print127.0.0.1.xls文档win2000 professional:excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程,
如此下去,excel进程会越来越多;
excel进程无法手动关闭,不允许结束进程
win2000 server :excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程;
excel进程可以手动关闭winxp professional :excel进程没有关闭;
第二次点击按钮的时候,系统没有新开一个excel进程,
而是继续使用上次没有关闭的进程;
excel进程可以手动关闭win2003 server :excel进程没有关闭;
第二次点击按钮的时候,系统新开了一个excel进程;
excel进程可以手动关闭以上4种情况的共同点是excel进程依然存在,但是只有2000 professional无法手动关闭,只有xp可以继续使用已经存在的excel进程请教原因,并希望高手可以给出解决的办法。System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)似乎没有太大的效果
http://www.aspxboy.com/476/archive.aspx
清理excel进程
参考
http://www.eggheadcafe.com/articles/20021012.asp
建议你使用杀进程的方法,在进程开始前取事件,开始后取事件,最后使用完再通过这两个事件将你生成的excel进程删除
取当前时间
Dim startTime as DateTime
Dim endTime as DateTime
startTime = DateTime.Now
xlsApp = New Microsoft.Office.Interop.Excel.ApplicationClass
endTime = DateTime.Now
…………
//操作完毕后
Process[] procArray = Process.GetProcessesByName("Excel")
Dim i as integer = 0
for i = 1 to procArray.Length
if procArray[i].StartTime >= startTime && procArray[i].StartTime <= endTime then
procArray[i].Kill()
next
我不熟悉vb.net,代码可能有错误,不过意思就这样,楼主可以变通一下
Couldn't get process information from remote machine请问是不是我的配置有问题,应该做哪些设置?
加上
xlsApp.Application.Workbooks.Close();
xlsApp.Application.Quit();
试一下.
Dim procArray() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName("Excel")
Dim i As Integer
For i = 0 To procArray.Length - 1
If procArray(i).StartTime >= startTime And procArray(i).StartTime <= endTime Then
procArray(i).Kill()
End If
Next
在VS2005中没有这样的情况,只是在2003中出现需要Kill.