新接手一个项目,C/S结构的,可以在客户端导出EXCEL文件,但是导出前会检查是否有EXCEL进程存在(原因不太清楚,可能是必须的?),现在要改成大家通过直接通过远程桌面连到服务器上运行该程序,这样就造成一个人在导出EXCEL的时候,另一个人就无法导出,必须等这个人导完才可以。我想请问大家有没有碰到过类似的情况,如果多人在一台机器上执行同一个应用程序同时要导出EXCEL文件是不是可行的?如果可以的话,大概是怎么实现的,有参考资料没有,谢谢!!!!

解决方案 »

  1.   

    我看了一下,程序里是这么判断是否有EXCEL打开的:
    Hwnd = FindWindow("XLMAIN", 0)
      If Hwnd <> 0 Then
            MsgBox XXXXXXXX
            Exit Sub
      End If
      

  2.   

    完全可以阿,只要你在程序里不判断excel是否打开就行了,也就是把楼上的代码注视掉
      

  3.   

    本帖最后由 bcrun 于 2010-08-12 14:01:40 编辑
      

  4.   


    这一段其实还是有用的 程序非正常中断后 系统里会留存多个Excel进程
    我猜想作者想避免这种情况发生 大概会在导出结束后kill所有的excel进程
      

  5.   

    也是,那就在程序中加上错误处理代码
    在错误处理中结束excel
      

  6.   

    导出程序中的检查就不要了,始终新建新的实例。关于 Excel 异常不能退出的问题,在服务器上专门运行一个程序:
    1)维护一个列表,成员自需要两个属性 {hWnd, 创建时间}
    2)定时对列表中的每个 hWnd 用 IsWindow() 进行检查,如果窗口已经关闭,则从列表中删除该成员
    3)定时查找所有类名为 XLMAIN 的窗口
     a)如果该 hWnd 在列表中不存在,认为是新建实例,在列表中添加 {hWnd, 当前时间}
     b)如果已存在,并且 当前时间-创建时间 > 1小时,认为是异常的实例,关闭该 hWnd 或杀掉该进程。可以根据你实际的导出用时调整 1小时 这个 有效存活时间。唯一的影响是服务端手工打开的 Excel 也会超时后被关闭。