以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  浏览器打开EXCEL报表,如何关闭  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27355)

--  作者:blackzhu
--  发布时间:2012/12/29 13:58:00
--  浏览器打开EXCEL报表,如何关闭
Dim FName As String = ProjectPath & "Reports\\报价表.xls"
If FileSys.FileExists(FName) Then
    Try
        Dim f As New System.IO.FileStream(FName,IO.FileMode.Open,IO.FileAccess.Read,IO.FileShare.None)
        f.Dispose()
    Catch ex As Exception
        MessageBox.Show("报价单打开中,请先关闭!","提示!")
        Dim App As New MSExcel.Application
        Dim Book1 As MSExcel.Workbook = App.Workbooks.Open(ProjectPath & "Reports\\报价表.xls")
        App.Visible = True
        Book1.Saved=True
        Book1.Close()
        App.Quit()
        e.Form.Controls("WebBrowser1").AddRess = ""
    End Try
End If

Dim tmp As String = ProjectPath & "Attachments\\报价表.xls"
Dim rpt As String = ProjectPath & "Reports\\报价表.xls"
Dim Book As New XLS.Book(tmp)
Dim dr As DataRow
Dim r As Row  = Tables("订单主表").Current
If r IsNot Nothing Then
    dr = DataTables("客户档案").Find("客户编号=\'" & r("客户编号") & "\'")
    If dr IsNot Nothing Then
        Book.Marks.Add("联系人",dr("联系人"))
        Book.Marks.Add("联系电话",dr("联系手机"))
    End If
End If
Book.Build()
Book.Save(rpt)
e.Form.Controls("WebBrowser1").AddRess = rpt

  我写了这个代码,但是还是提示报表打开中,如何关闭?

--  作者:lin_hailun
--  发布时间:2012/12/29 14:04:00
--  
 无法测试,我测试的时候,填入地址,无法直接在浏览器里显示,而是弹出一个打开保存的对话框,然后打开了excel显示。
--  作者:blackzhu
--  发布时间:2012/12/29 14:09:00
--  
这个纠结的  没有办法先关闭的?
--  作者:lin_hailun
--  发布时间:2012/12/29 14:25:00
--  
以下是引用lin_hailun在2012-12-29 14:04:00的发言:
 无法测试,我测试的时候,填入地址,无法直接在浏览器里显示,而是弹出一个打开保存的对话框,然后打开了excel显示。


http://www.foxtable.com/help/topics/1892.htm

--  作者:lin_hailun
--  发布时间:2012/12/29 14:26:00
--  
 测试了一下,为什么不对webbrowser的Address进行一下判断?

 如果符合,就定位到空的地址"",然后再指定回来。

--  作者:blackzhu
--  发布时间:2012/12/29 14:42:00
--  
林 不行吧  只是清空地址 是没有用的.excel还是打开着.
--  作者:blackzhu
--  发布时间:2012/12/29 15:04:00
--  
终于可以了:

e.Form.Controls("WebBrowser1").AddRess = ""
Dim FName As String = ProjectPath & "Reports\\报价表.xls"
If FileSys.FileExists(FName) Then
    Try
        Dim f As New System.IO.FileStream(FName,IO.FileMode.Open,IO.FileAccess.Read,IO.FileShare.None)
        f.Dispose
    Catch ex As Exception
        If MessageBox.Show("报价单打开中,请先关闭!","提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
            Dim App As New MSExcel.Application
            Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(FName)
            App.Visible = True
            App.Quit
        Else
            Return
        End If
    End Try
End If

Dim tmp As String = ProjectPath & "Attachments\\报价表.xls"
Dim rpt As String = ProjectPath & "Reports\\报价表.xls"
Dim Book As New XLS.Book(tmp)
Dim dr As DataRow
Dim r As Row  = Tables("订单主表").Current
If r IsNot Nothing Then
    dr = DataTables("客户档案").Find("客户编号=\'" & r("客户编号") & "\'")
    If dr IsNot Nothing Then
        Book.Marks.Add("联系人",dr("联系人"))
        Book.Marks.Add("联系电话",dr("联系手机"))
    End If
End If
Book.Build()
Book.Save(rpt)
e.Form.Controls("WebBrowser1").AddRess = rpt

--  作者:lin_hailun
--  发布时间:2012/12/29 15:07:00
--  
以下是引用blackzhu在2012-12-29 14:42:00的发言:
林 不行吧  只是清空地址 是没有用的.excel还是打开着.


理应是没有问题的。看看你的进程里是否有多个excel进程,结束一下再试吧。

--  作者:blackzhu
--  发布时间:2012/12/29 15:30:00
--  

e.Form.Controls("WebBrowser1").Print()   老大的这个应该加入预览功能.


--  作者:sunsenfeng
--  发布时间:2012/12/30 17:24:00
--  

Excel报表是不是应该先不用打开,静默报表就行了。当需要查看的时候,再打开就行

比如说

.Build() \'后台产生报表

.Save() \'保存

.Preview() \'预览

.Print() \'直接打印

甚至可以根据现有情况,在打开的情况下不能Build,可以有个

.Close()

 

这样能行吗?狐老大?

总之,每次打印都打开Excel,让人觉得不伦不类,主要是利用Excel似的