Dim a As Excel.Application
                'Dim oBook As Excel.Workbook()
                'Dim oSheet As Excel.Worksheet()
                a = New Excel.Application
                a.Workbooks.Open(Me.Server.MapPath("ChangWu\BiaoDan\RenShiDangAn.xls"))
                a.Workbooks.Item(1).Worksheets.Item(1).Cells(3, 4) = Ared("姓名")
                a.Workbooks.Item(1).Worksheets.Item(1).Cells(3, 7) = Ared("工号")
             
                a.DisplayAlerts = False
                a.Visible = True
                a.Workbooks.Item(1).PrintPreview(False)
                '''关闭预览界面后,释放资源 
                System.Runtime.InteropServices.Marshal.ReleaseComObject(a.Workbooks.Item(1).Worksheets.Item(1))
                System.Runtime.InteropServices.Marshal.ReleaseComObject(a.Workbooks(1))
                a.Workbooks.Item(1).Close()
                a.Quit()
                a = Nothing                已经实现数据导入到指定格式的excel,并在服务器端能够打印预览
                问题:在客户端打击打印->服务端跳出excel打印预览,如何实现
                      客户端打印预览呢?如何杀掉excel进程

解决方案 »

  1.   

    在服务器端生成excel后需要下载到客户端,或是在客户端浏览器直接打开才可以打印。quit是可以关掉excel的,但是内存回收可能会有延迟,你可以使用GC对象进行回收
    GC.Collect()
    GC.WaitForPendingFinalizers()
      

  2.   

    怎样才能在浏览器直接打开呢?生成excel后直接打开excel
      

  3.   

    你这种方法不行,你把IIS想象成一个用户,他执行了winForm的操作,只在自己的机器上(即服务器)才能看到excel操作你可以再服务器端把你生成的excel保存成文件,然后Response.write到客户端,同时指定附件类型为excel,这样用户就可以打开了。
    public void page_load(){        FileStream fStream;
            fStream = File.OpenRead("E:\text.xls");//你生成的excel文件
            byte[] buffer = new byte[fStream.Length + 1]; h);//转成二进制流
            fStream.Read(buffer, 0, buffer.Length);
            fStream.Close();        //以下将文件输出到客户端
            Response.Clear()
            Response.ContentType = "application/ms-excel"
            Response.AddHeader("Content-Length", buffer.GetLength(0).ToString); 
            Response.AddHeader("Content-Disposition", "attachment;filename=file.xls"); 
            Response.Filter.Close(); 
            //Close the filter 
            Response.BinaryWrite(buffer); 
            Response.Flush(); 
            Response.End(); }
      

  4.   

       这里去下载参考下
    http://download.csdn.net/source/1368361
      

  5.   

     Dim ds() As Diagnostics.Process
                Dim d As Diagnostics.Process
                ds = System.Diagnostics.Process.GetProcessesByName("Excel")
                GC.Collect()
                For Each d In ds
                    '只退出标题为空的EXCEL对象:可能是本程序调用而未完全退出的对象
                    If Len(d.MainWindowTitle) = 0 Then
                        d.Kill()
                        d.Close()
                    End If
                Next  '杀掉EXCEL进程
      

  6.   

          我同样用了上面的方法,在生成excel后面加了如上代码:Dim fileName As String = "RenShiDangAn.xls"
                    Dim filePath As String = Server.MapPath("ChangWu\BiaoDan\RenShiDangAn.xls")
                    Dim fileInfo As New FileInfo(filePath)
                    Response.Clear()
                    Response.ClearContent()
                    Response.ClearHeaders()
                    Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName)
                    Response.AddHeader("Content-Length", fileInfo.Length.ToString())
                    Response.AddHeader("Content-Transfer-Encoding", "binary")
                    Response.ContentType = "application/octet-stream"
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312")
                    Response.WriteFile(fileInfo.FullName)
                    Response.Flush()
                    Response.End()
                    隐藏生成excel下面两句
                     a.DisplayAlerts = False
                    a.Visible = True
                   结果在服务器提示是否保存,不保存则下载上次更新的模板。
                 加上上面两句则直接下载上次模板更新的excel
                     
      

  7.   

    你生成excel可以采用直接写xml或者html代码的方式,你把你代码里面的Response.WriteFile(fileInfo.FullName) 换成        Response.Write("<html><body><table><tr><td>姓名</td><td>工号</td></tr><table></body></html>")试试,只是介绍个方法,生成xml的方式产生的excel要专业些,不过比较复杂。
      

  8.   

    在服务器端生成excel后需要下载到客户端,或是在客户端浏览器直接打开才可以打印。 
      

  9.   

    生成excel加一句a.Workbooks.Item(1).Save()保存为什么提示存在相同文件名是否保存?
      

  10.   

    记住打开时进程的ID号。之后杀掉这个ID的进程。这样防止杀掉其他同一个名字的进程。