我的开发环境是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)似乎没有太大的效果

解决方案 »

  1.   

    参考
    http://www.aspxboy.com/476/archive.aspx
    清理excel进程
    参考
    http://www.eggheadcafe.com/articles/20021012.asp
      

  2.   

    一般在web中用完后excel进程仍会存在,即使在windwos form程序中调试好的,能正常释放的进程,到了web中也可能出现问题
    建议你使用杀进程的方法,在进程开始前取事件,开始后取事件,最后使用完再通过这两个事件将你生成的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,代码可能有错误,不过意思就这样,楼主可以变通一下
      

  3.   

    to : memoriccell(记忆细胞) 我按照你说的方法写了一段结束进程的代码,但是报错,错误信息为 
    Couldn't get process information from remote machine请问是不是我的配置有问题,应该做哪些设置?
      

  4.   

    在xlsWorkBook.SaveAs("c:\print" & Request.UserHostName() & ".xls")后面
    加上
    xlsApp.Application.Workbooks.Close(); 
    xlsApp.Application.Quit();  
    试一下.
      

  5.   

    VB.net寫法如下,可以執行 
    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
      

  6.   

    最好在循环前在加上判断procArray.Length >=1
    在VS2005中没有这样的情况,只是在2003中出现需要Kill.
      

  7.   

    解决了,谢谢各位。to : memoriccell(记忆细胞)要想访问服务器的进程,必须在iis里面给页面所在虚拟目录管理员访问权限。否则不可以访问进程。大家辛苦,散分了