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


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

主题:Excel报表打印问题

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


加好友 发短信
等级:二尾狐 帖子:590 积分:5495 威望:0 精华:0 注册:2012/6/29 19:11:00
Excel报表打印问题  发帖心情 Post By:2017/9/12 14:42:00 [只看该作者]

遇到一个奇怪的问题,同是以下代码,根据目录树的的节点不同,选择不同的模版进行导出(如附件),我用“大货肩带”模版导出就没有问题,但是用“大货后工序”导出就会有下图的问题;经过一番测试,当款号(StyleNo)字符在8个以内可以正常导出,但是超过8个字符就是出现以下问题;麻烦各位老师帮忙支支招;谢谢了;根据实际按例,程序应该是执行的以下黄色底的部分?

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工艺书(大货肩带).xls

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工艺书(大货后工序).xls

 

 

 
图片点击可在新窗口打开查看此主题相关图片如下:123.jpg
图片点击可在新窗口打开查看
 

Dim TreeNode As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim TreeNodeStr As String
Dim CurRow As Row  = Tables("MainSchedule").Current          '获取当前排期行;
Dim sampleTypeStr As String = CurRow("SampleType")      '获取当前排期样办类型
Dim StyleStr As String = CurRow("StyleNo")
Dim rl As String = _userroles        '获取当前登录用户角色
Dim Book As New XLS.Book()
Dim filepath As String  '定义报表输出路径;
Dim styleToNarrow() As String = StyleStr.Split("*")

If styleToNarrow.Length > 1 Then
    styleStr = styleToNarrow(1)  '只获取SAP款号
End If

If rl.Contains("配料") Or rl.Contains("系统管理员") Then   '根据不同的用户角色选择不同的工序模版;
    If sampleTypeStr.Contains("PP") Then
        If TreeNode.SelectedNode.Text <> "" Then
            TreeNodeStr = TreeNode.SelectedNode.Text    '获取PP办部件名称
        End If
        If TreeNodeStr.Contains("大货") '如果样办的部件名称包含"大货"字样,则调用大货工艺书模版;
            Book = New XLS.Book(ProjectPath & "Attachments\工艺书(" & vars("ProcessPartName") & ").xls") '打开模板
        Else
            msgbox("你选择的不是大货工艺,请重新选择~")
            Return
        End If
    Else
        Book = New XLS.Book(ProjectPath & "Attachments\工艺书(配料中心).xls") '如果样办类型不是PP办,那么只调用正常做办的工艺书模板
    End If
Else         '除配料员与系统管理员外,其他用户的报表打印格式;
    If sampleTypeStr.Contains("PP") Then
        If TreeNode.SelectedNode.Text <> "" Then
            TreeNodeStr = TreeNode.SelectedNode.Text    '获取PP办部件名称
        End If
        If TreeNodeStr.Contains("大货") '如果样办的部件名称包含"大货"字样,则调用大货工艺书模版;
            Book = New XLS.Book(ProjectPath & "Attachments\工艺书(" & vars("ProcessPartName") & ").xls") '打开模板
        Else
            msgbox("你选择的不是大货工艺,请重新选择~")
            Return
        End If
    Else
        Book = New XLS.Book(ProjectPath & "Attachments\工艺书(QA).xls") ''如果样办类型不是PP办,那么只调用正常做办的工艺书模板
    End If
End If

'开始调用已经打印的工艺书模版设置数据导出条件 ,并生成报表;
Dim Sheet As XLS.Sheet = Book.Sheets(0)
If sampleTypeStr.Contains("PP") Then
    If vars("ProcessPartName") <> "" Then      '对已经打开工艺书模板设置导出的筛选条件;
        Sheet(7,15).Value = "< SamplePart = '" & vars("ProcessPartName") & "'>"
    End If
Else
    If vars("ProcessPartName") <> "" Then      '对已经打开工艺书模板设置导出的筛选条件;
        If rl.Contains("配料") Or rl.Contains("系统管理员") Then
            Sheet(11,18).Value = "< SamplePart = '" & vars("ProcessPartName") & "'>"
        Else
            Sheet(7,18).Value = "< SamplePart = '" & vars("ProcessPartName") & "'>"
        End If
    Else
        If rl.Contains("配料") Or rl.Contains("系统管理员") Then
            Sheet(11,18).Value = ""
        Else
            Sheet(7,18).Value = ""
        End If
    End If
End If
'针对是否为PP办设置不同的输出文件名;
If sampleTypeStr.Contains("PP") Then
    filepath  = "D:\reports\" & StyleStr & "(" & vars("ProcessPartName") & ")工艺书.xls"
Else
    filepath  = "D:\reports\" & CurRow("SrsNO") & "(" & vars("ProcessPartName") & ")工艺书.xls"
End If
Book.Build() '生成细节区
Book.Save(filepath)'保存工作簿
'以下代码用于设置自动换行及调整行高(对合并单元格无效)
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells
Rg.WrapText = True
Rg.EntireRow.AutoFit  '自动调整行高
wb.saved = True
App.DisplayAlerts = False
App.Visible = True
If rl.Contains("配料") Then  ' Or rl.Contains("系统管理员")
    Ws.PrintOut(Preview:=False,ActivePrinter:="doPDF v7")    '直接打印;
Else
    Return
End If
App.Quit


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


加好友 发短信
等级:二尾狐 帖子:590 积分:5495 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/9/12 15:20:00 [只看该作者]

急,在线等图片点击可在新窗口打开查看


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


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

 调出任务管理器,看看是否有 excel.exe 的进程,先全部结束掉。

 

 代码应该没啥问题的,你加入msgbox定位一下出错位置。


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


加好友 发短信
等级:二尾狐 帖子:590 积分:5495 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/9/12 17:25:00 [只看该作者]

我都试过了,问题就出在以下红框的代码里,如果把这后半部分删了就没问题了;或者让StyleNo的字符不超过8个就没问题;所以我猜想会不会Excel本身有什么问题?如果Excel本身有问题,我用不超过8个字符的方式导出的Excel报表后,再手动添加多一些字符又可以;所以就又碉堡了;

 


图片点击可在新窗口打开查看此主题相关图片如下:456.jpg
图片点击可在新窗口打开查看

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


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

试试改成

 

*[@mainSchedule, StyleNo]*

 

http://www.foxtable.com/webhelp/scr/2117.htm

 


 回到顶部