Foxtable(狐表)用户栏目专家坐堂 → 打印报错


  共有1664人关注过本帖树形打印复制链接

主题:打印报错

帅哥哟,离线,有人找我吗?
qaz17909
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:776 积分:8851 威望:0 精华:0 注册:2017/1/26 14:38:00
打印报错  发帖心情 Post By:2018/6/4 17:54:00 [只看该作者]

点击控件后打印复选框中的勾选的行,第一次可以,但是第二次点击的时候报错,“报告.doc已被锁定,无法编制”
Dim rs As List(of Row) = t.GetCheckedRows
        If rs.Count > 0 Then '如果存在符合条件的行
            Dim tm As String  = ProjectPath & "Attachments\报告.doc" '指定模板文件
            Dim fl As String = ProjectPath & "Reports\报告.doc"
            Dim wrt As New WordReport(Tables("报告_Table1"),tm,fl) '定义一个WordReport
            For Each r As Row In rs '逐行生成报表
                wrt.BuildOne(r)
                wrt.RecordsOnEachPage = 1
            Next
            'wrt.Show() '显示报表
            Dim Proc As New Process '打开工作簿
            Proc.File = fl
            Proc.Verb= "Print"
            Proc.Start()
        Else
            MessageBox.show("请先勾选要打印的报告!")
        End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/4 18:26:00 [只看该作者]

打印word报表这样写代码,参考

 

Dim app As New MSWord.Application
try
    Dim fileName = "d:\test.doc"
    Dim doc = app.Documents.Open(fileName)
    Doc.PrintPreview
    app.Visible = True
    'Doc.PrintOut '打印
catch ex As exception
    msgbox(ex.message)
finally
    'app.Quit
End try


 回到顶部
帅哥哟,离线,有人找我吗?
qaz17909
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:776 积分:8851 威望:0 精华:0 注册:2017/1/26 14:38:00
  发帖心情 Post By:2018/6/4 20:52:00 [只看该作者]

这样写对吗,好像“报告.doc”文件未保存仍然占用,所以无法打印。

Dim rs As List(of Row) = t.GetCheckedRows
        If rs.Count > 0 Then '如果存在符合条件的行
            Dim tm As String  = ProjectPath & "Attachments\报告.doc" '指定模板文件
            Dim fl As String = ProjectPath & "Reports\报告.doc"
            Dim wrt As New WordReport(Tables("报告_Table1"),tm,fl) '定义一个WordReport
            For Each r As Row In rs '逐行生成报表
                wrt.BuildOne(r)
                wrt.RecordsOnEachPage = 1
            Next
            'wrt.Show() '显示报表
            Dim app As New MSWord.Application
            try
                Dim doc = app.Documents.Open(fl)
                Doc.PrintPreview
                app.Visible = True
                Doc.PrintOut '打印
            catch ex As exception
                msgbox(ex.message)
            finally
                app.Quit
            End try
        Else
            MessageBox.show("请先勾选要打印的报告!")
        End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106816 积分:543281 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/4 21:03:00 [只看该作者]

Dim rs As List(of Row) = t.GetCheckedRows
If rs.Count > 0 Then '如果存在符合条件的行
    Dim tm As String  = ProjectPath & "Attachments\报告.doc" '指定模板文件
    Dim fl As String = ProjectPath & "Reports\报告.doc"
    Dim wrt As New WordReport(Tables("报告_Table1"),tm,fl) '定义一个WordReport
    For Each r As Row In rs '逐行生成报表
        wrt.BuildOne(r)
        wrt.RecordsOnEachPage = 1
    Next
    wrt.Quit
    'wrt.Show() '显示报表
    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open(fl)
        Doc.PrintPreview
        app.Visible = True
        Doc.PrintOut '打印
    catch ex As exception
        msgbox(ex.message)
    finally
        app.Quit
    End try
Else
    MessageBox.show("请先勾选要打印的报告!")
End If

 回到顶部
帅哥哟,离线,有人找我吗?
qaz17909
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:776 积分:8851 威望:0 精华:0 注册:2017/1/26 14:38:00
  发帖心情 Post By:2018/6/5 8:13:00 [只看该作者]

这样写是哪个地方有问题,提示“目标报表文件已经被其他进程打开,生成的报表将存为一个临时文件”,然后打印出来的都是第一个文件

Dim rs As List(of Row) = t.GetCheckedRows
        If rs.Count > 0 Then '如果存在符合条件的行
            For Each r As Row In rs '逐行生成报表
                If r("送样方式") = "自送样" Then
                    Dim tm As String  = ProjectPath & "Attachments\自送样报告首页.doc" '指定模板文件
                    Dim fl As String = ProjectPath & "Reports\自送样报告首页.doc"
                    Dim wrt As New WordReport(Tables("报告打印_Table1"),tm,fl) '定义一个WordReport
                    wrt.BuildOne(r)
                    wrt.RecordsOnEachPage = 1
                    wrt.Quit
                    Dim app As New MSWord.Application
                    try
                        Dim doc = app.Documents.Open(fl)
                        Doc.PrintPreview
                        app.Visible = True
                        Doc.PrintOut '打印
                    catch ex As exception
                        msgbox(ex.message)
                    finally
                        app.Quit
                    End try
                Else If r("送样方式") = "自采样" Then
                    Dim tm As String  = ProjectPath & "Attachments\自采样报告首页.doc" '指定模板文件
                    Dim fl As String = ProjectPath & "Reports\自采样报告首页.doc"
                    Dim wrt As New WordReport(Tables("报告打印_Table1"),tm,fl) '定义一个WordReport
                    wrt.BuildOne(r)
                    wrt.RecordsOnEachPage = 1
                    wrt.Quit
                    Dim app As New MSWord.Application
                    try
                        Dim doc = app.Documents.Open(fl)
                        Doc.PrintPreview
                        app.Visible = True
                        Doc.PrintOut '打印
                    catch ex As exception
                        msgbox(ex.message)
                    finally
                        app.Quit
                    End try
                End If
            Next
        Else
            MessageBox.show("请先勾选要打印的报告!")
        End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/5 8:45:00 [只看该作者]

比如

 

                    Dim tm As String  = ProjectPath & "Attachments\自送样报告首页.doc" '指定模板文件
                    Dim fl As String = ProjectPath & "Reports\自送样报告首页.doc"
                    Dim wrt As New WordReport(Tables("报告打印_Table1"),tm,fl) '定义一个WordReport
                    wrt.BuildOne(r)
                    wrt.RecordsOnEachPage = 1
                    wrt.Quit
                    Dim app As New MSWord.Application
                    try
                        Dim doc = app.Documents.Open(fl)
                        'Doc.PrintPreview
                        'app.Visible = True
                        Doc.PrintOut '打印
                    catch ex As exception
                        msgbox(ex.message)
                    finally
                        app.Quit
                    End try

 回到顶部
帅哥哟,离线,有人找我吗?
qaz17909
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:776 积分:8851 威望:0 精华:0 注册:2017/1/26 14:38:00
  发帖心情 Post By:2018/6/5 8:57:00 [只看该作者]

没有改变,还是出现一样的情况

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/5 9:48:00 [只看该作者]

Dim fl As String = ProjectPath & "Reports\自送样报告首页.doc"

 

改成

 

Dim fl As String = ProjectPath & "Reports\自送样报告首页" & r("_Identify") & ".doc"


 回到顶部
帅哥哟,离线,有人找我吗?
qaz17909
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:776 积分:8851 威望:0 精华:0 注册:2017/1/26 14:38:00
  发帖心情 Post By:2018/6/5 10:47:00 [只看该作者]

可以了,谢谢!

 回到顶部