Foxtable(狐表)用户栏目专家坐堂 → [求助]


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

主题:[求助]

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


加好友 发短信
等级:婴狐 帖子:47 积分:449 威望:0 精华:0 注册:2013/7/7 20:49:00
[求助]  发帖心情 Post By:2016/4/6 9:22:00 [只看该作者]

本人设计专业报表编码如下:
Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.PaperKind = 9 '纸张类型改为A4
Doc.PageSetting.LeftMargin = 25 '设置左边距
Doc.PageSetting.RightMargin = 15 '设置右边距
Doc.PageSetting.TopMargin = 20 '设置上边距
Doc.PageSetting.BottomMargin = 15 '设置下边距
Dim tbl As Table = Tables("人事档案")'指定表和打印范围从当前行到选定行
For i As Integer = tbl.TopRow To tbl.BottomRow 
    Dim rw As Row = tbl.Rows(i)
Dim rt As New prt.RenderTable() '定义一个表格对象
rt.Style.GridLines.All = New Prt.LineDef(0.5, Color.Black) '定义外外边框线为0.5
rt.Style.GridLines.Horz = new Prt.LineDef(0.25,Color. Black) '定义内水平网格线为0.25
rt.Style.GridLines.Vert = new Prt.LineDef(0.25,Color. Black) '定义内竖直网格线为0.0.25
rt.Style.GridLines.Bottom = new Prt.LineDef(0.25,Color. Black) '定义底网格线为0.0.25
Dim rx As New prt.RenderText '定义一个文本对象用于加表头
Dim ra As New prt.RenderArea '定义一个容器
    ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never  '禁止容器因为分页而被垂直分割
'设置页眉
Dim ym As New prt.RenderTable
ym.Cells(0,0).Text = rw("机构名称")
ym.Cells(0,2).Text = "D105-01" '等于表格编码
ym.Cols(0).Style.TextAlignHorz = prt.AlignHorzEnum.Left '左页眉左对齐
ym.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.right '右页眉右对齐
ym.Style.Borders.Bottom = New prt.LineDef(1, Color.DarkRed) '设置底边框1的宽度,深红色
ym.CellStyle.Spacing.Bottom = 0.5 '底端内容缩进0.5毫米
ym.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
Doc.PageHeader = ym '作为页眉使用
'设置页脚
Dim yj As New prt.RenderTable
yj.Cells(0,0).Text = "本人签名:"
yj.Cells(0,1).Text = "日期:        年    月    日" 
yj.Cols(0).Style.TextAlignHorz = prt.AlignHorzEnum.Left '左页眉左对齐
yj.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.right '右页眉右对齐
yj.CellStyle.Spacing.Top = 0.5 '顶部内容缩进0.5毫米
yj.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
Doc.PageFooter = yj '作为页脚使用
'加入标题
    rx.text = "员工履历表"
    rx.Style.FontBold = True '字体加粗
    rx.Style.FontSize = 18 '大体大小为18磅
    rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中排列
    rx.Style.Padding.Top = 1 '上边距1毫米
    rx.Style.Spacing.Bottom = 0 '和下面的对象(表格)距离1毫米
    ra.Children.Add(rx) '加入到容器中
 '设置副标题
    rt.Rows(0).Style.GridLines.All = New prt.LineDef("0mm", Color.white) '去掉第一行的网格线
    rt.Cells(0,0).SpanCols = 9 '合并第一行全部单元格,用于显示副标题
    rt.Cells(0,0).text = "                                                         NO:JD0302-" & rw("工号") '通过左边空格数量来调整副标题位置
    rt.Cells(0,0).Style.Font = New Font("宋体", 11, FontStyle.Bold) '副标题11号宋体加粗(五号)
    rt.Cells(0,0).Style.TextAlignHorz = prt.AlignHorzEnum.Left '副标题内容居左
    rt.Rows(0).Style.GridLines.Bottom = New prt.Linedef(0.5,Color. Black)  '恢复第一行底端的网格线
    rt.Rows(0).Height = 5 '设置第一行的高度,拉开和表格主体的距离
'设置表格行数?列数?行高?列宽及网格线及字体
rt.Width = 170 '表宽为170毫米
rt.Height = 86 '表高为94毫米
rt.Rows.Count = 9 '设置行数为9
rt.Cols.Count = 9 '设置列数为8
rt.Cells(1,5).SpanCols = 3  ' 横向合并
rt.Cells(2,5).SpanCols = 3
rt.Cells(3,0).SpanCols = 2 
rt.Cells(3,2).SpanCols = 6 
rt.Cells(4,0).SpanCols = 2
rt.Cells(4,2).SpanCols = 2
rt.Cells(4,5).SpanCols = 3  
rt.Cells(5,0).SpanCols = 2
rt.Cells(5,2).SpanCols = 2
rt.Cells(5,5).SpanCols = 2 
rt.Cells(6,2).SpanCols = 3
rt.Cells(6,7).SpanCols = 2
rt.Cells(7,2).SpanCols = 3
rt.Cells(7,7).SpanCols = 2 
rt.Cells(8,2).SpanCols = 3
rt.Cells(8,7).SpanCols = 2 
rt.Cells(1,8).SpanRows = 4 '竖向合并 
rt.Cells(6,0).SpanRows = 3
rt.Cells(6,5).SpanRows = 3  
'设置字体及对齐方式 
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '内容水平居中
rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
rt.Cells(3,2).Style.TextAlignHorz = prt.AlignHorzEnum.Left '家庭住址直居中靠左
rt.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
rt.Cols(0).Width = 12 '设置前列的宽度
rt.Cols(1).Width = 20
rt.Cols(2).Width = 20
rt.Cols(3).Width = 15
rt.Cols(4).Width = 20
rt.Cols(5).Width = 12
rt.Cols(6).Width = 20
rt.Cols(7).Width = 20
'下面很简单,指定每一个单元格的内容
rt.Cells(1,0).Text= "姓名"
rt.Cells(1,1).Text = rw("姓名")
rt.Cells(1,2).Text= "性别"
rt.Cells(1,3).Text = rw("性别")
rt.Cells(1,4).Text= "出生年月"
rt.Cells(1,5).Text = Format(rw("出生日期"),"yyyy年MM月")
Dim fp As String = ProjectPath & "Attachments/" & rw("照片")
msgbox(fp)
rt.Cells(1,8).Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '居中显示
rt.Cells(1,8).Image = GetImage(fp)
rt.Cells(2,0).Text= "民族"
rt.Cells(2,1).Text = rw("民族")
rt.Cells(2,2).Text= "文化程度"
rt.Cells(2,3).Text = rw("文化程度")
rt.Cells(2,4).Text= "身份证号"
rt.Cells(2,5).Text = rw("身份证号")
rt.Cells(3,0).Text= "家庭住址"
rt.Cells(3,2).Text = rw("家庭住址")
rt.Cells(4,0).Text= "职称或技术等级"
rt.Cells(4,2).Text = rw("技术职称")
rt.Cells(4,4).Text= "技术专长"
rt.Cells(4,5).Text = rw("技术专长")
rt.Cells(5,0).Text= "入职时间"
rt.Cells(5,2).Text = Format(rw("入职时间"),"yyyy年MM月dd日")
rt.Cells(5,4).Text= "任职部门"
rt.Cells(5,5).Text = rw("所在部门")
rt.Cells(5,7).Text= "担任职务"
rt.Cells(5,8).Text = rw("担任职务")
rt.Cells(6,0).Text= "职业资格"
rt.Cells(6,1).Text= "证书名称"
rt.Cells(6,2).Text = rw("执业证书")
rt.Cells(7,1).Text= "发证部门"
rt.Cells(7,2).Text = rw("发证部门")
rt.Cells(8,1).Text= "证书编号"
rt.Cells(8,2).Text = rw("证书编号")
rt.Cells(6,5).Text= "学历情况"
rt.Cells(6,6).Text= "毕业院校"
rt.Cells(6,7).Text = rw("毕业院校")
rt.Cells(7,6).Text= "毕业时间"
rt.Cells(7,7).Text = Format(rw("毕业时间"),"yyyy年MM月")
rt.Cells(8,6).Text= "所学专业"
rt.Cells(8,7).Text = rw("所学专业")
ra.Children.Add(rt) '加入到容器中
'培训简历
rt = New prt.RenderTable '定义一个新的表格对象
rt.Style.GridLines.All = New Prt.LineDef(0.5, Color.Black) '定义外边框线为0.5
rt.Style.GridLines.Horz = new Prt.LineDef(0.25,Color. Black) '定义内水平网格线为0.25
rt.Style.GridLines.Vert = new Prt.LineDef(0.25,Color. Black) '定义内竖直网格线为0.0.25
rt.Style.GridLines.Top = new Prt.LineDef("0mm", Color.white) '定义顶网格线为0
rt.Style.GridLines.Bottom = new Prt.LineDef(0.25,Color. Black) '定义底网格线为0.25
rt.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '内容水平居中
rt.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.Left '第三列左对齐
rt.Cells(0,2).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行第三列水平居中
rt.Width = 170 '表宽为170毫米
rt.Height = 40 '表高为40毫米
rt.Cols.Count = 4 '设置列数为4列
rt.Rows.Count = 4 '设置行数为10行
rt.Cells(0,0).SpanRows = 4 '第一列向下合并
rt.Cols(0).Width = 12 '设置前列的宽度
rt.Cols(1).Width = 45
rt.Cols(2).Width = 80
rt.Cells(0,0).Text = "培训简历"
rt.Cells(0,1).Text = "起止年限"
rt.Cells(0,2).Text = "培训内容"
rt.Cells(0,3).Text = "证书号"
With Tables("人事档案.培训简历")
    For r As Integer = 0 To .Rows.Count - 1 '遍历关联表每一行
        rt.Cells(r+1,1).Text = .rows(r)("起止年限")
        rt.Cells(r+1,2).Text = .rows(r)("培训内容")
        rt.Cells(r+1,3).Text = .rows(r)("证书号")
             Next
End With
ra.Children.Add(rt) '加入到容器中
'工作简历
rt = New prt.RenderTable '定义一个新的表格对象
rt.Style.GridLines.All = New Prt.LineDef(0.5, Color.Black) '定义外边框线为0.5
rt.Style.GridLines.Horz = new Prt.LineDef(0.25,Color. Black) '定义内水平网格线为0.25
rt.Style.GridLines.Vert = new Prt.LineDef(0.25,Color. Black) '定义内竖直网格线为0.0.25
rt.Style.GridLines.Top = new Prt.LineDef("0mm", Color.white) '定义顶网格线为0
rt.Style.GridLines.Bottom = new Prt.LineDef(0.25,Color. Black) '定义底网格线为0.25
rt.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '内容水平居中
rt.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.Left '第三列左对齐
rt.Cells(0,2).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行第三列水平居中
rt.Width = 170 '表宽为170毫米
rt.Height = 110 '表高为110毫米
rt.Cols.Count = 4 '设置列数为4列
rt.Rows.Count = 11 '设置行数为10行
rt.Cells(0,0).SpanRows = 11 '第一列向下合并
rt.Cols(0).Width = 12 '设置前列的宽度
rt.Cols(1).Width = 45
rt.Cols(2).Width = 80
rt.Cells(0,0).Text = "工作简历"
rt.Cells(0,1).Text = "起止年限"
rt.Cells(0,2).Text = "单位及岗位"
rt.Cells(0,3).Text = "表彰简历"
With Tables("人事档案.工作简历")
    For r As Integer = 0 To .Rows.Count - 1 '遍历关联表每一行
        rt.Cells(r+1,1).Text = .rows(r)("起止年限")
        rt.Cells(r+1,2).Text = .rows(r)("单位及岗位")
        rt.Cells(r+1,3).Text = .rows(r)("表彰简历")
             Next
End With
ra.Children.Add(rt) '加入到容器中
'备注栏
rt = New prt.RenderTable '定义一个新的表格对象
rt.Style.GridLines.All = New Prt.LineDef(0.5, Color.Black) '定义外边框线为0.5
rt.Style.GridLines.Horz = new Prt.LineDef(0.25,Color. Black) '定义内水平网格线为0.25
rt.Style.GridLines.Vert = new Prt.LineDef(0.25,Color. Black) '定义内竖直网格线为0.0.25
rt.Style.GridLines.Top = new Prt.LineDef("0mm", Color.white) '定义顶网格线为0
rt.Style.GridLines.Bottom = new Prt.LineDef(0.5,Color. Black) '定义底网格线为0.5
rt.Style.Font = New Font("宋体", 11) '设置字体为宋体11号
rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
rt.RowGroups(0,1).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行内容水平居中
rt.Cells(0,1).Style.TextAlignHorz = prt.AlignHorzEnum.Left '备注内容垂直居中靠左
rt.Width = 170 '表宽为170毫米
rt.Height = 8 '表高为6毫米
rt.Cols.Count = 2 '设置列数为2列
rt.Rows.Count = 1 '设置行数为1行
rt.Cols(0).Width = 12 '设置前列的宽度
rt.Cells(0,0).Text = "备注"
rt.Cells(0,1).Text = rw("备注")
ra.Children.Add(rt) '加入到容器中
Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
Next
    Doc.Preview() '预览报表
现存在以下问题:
(1)当选择多行进行一次同时打印时,关联表的内容均为当前行,不会自动更换;
(2)每次打印报告时都会出现以下对话框
图片点击可在新窗口打开查看此主题相关图片如下:qq拼音截图未命名.png
图片点击可在新窗口打开查看
(3)本人设置时间格式为yyyy年MM月,但时间内容没填写时显示000年01月。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 9:23:00 [只看该作者]

 请上传具体例子测试。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 9:27:00 [只看该作者]

1、上传具体foxtable例子。

 

2、msgbox(fp) 去掉

 

3、比如 Format(rw("毕业时间"),"yyyy年MM月") 改成 IIF(rw.IsNull("毕业时间"), "", Format(rw("毕业时间"),"yyyy年MM月"))


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 9:47:00 [只看该作者]

问题1,改一下代码即可

 

For i As Integer = tbl.TopRow To tbl.BottomRow 
    Dim rw As Row = tbl.Rows(i)

    tbl.Position = i


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


加好友 发短信
等级:婴狐 帖子:47 积分:449 威望:0 精华:0 注册:2013/7/7 20:49:00
  发帖心情 Post By:2016/4/6 16:07:00 [只看该作者]

谢谢,第1;第2个问题已解决,但第三个问题还是没解决,时间为空值时还是显示0001年01月


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 16:11:00 [只看该作者]

3、不可能不行的,你认真测试

 

rt.Cells(7,7).Text = Format(rw("毕业时间"),"yyyy年MM月")

 

改成

 

rt.Cells(7,7).Text = IIF(rw.IsNull("毕业时间"), "", Format(rw("毕业时间"),"yyyy年MM月"))


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


加好友 发短信
等级:婴狐 帖子:47 积分:449 威望:0 精华:0 注册:2013/7/7 20:49:00
  发帖心情 Post By:2016/4/6 16:29:00 [只看该作者]

好了,非常感谢!

 回到顶部