以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83292) |
-- 作者:168448704 -- 发布时间: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)当选择多行进行一次同时打印时,关联表的内容均为当前行,不会自动更换; (3)本人设置时间格式为yyyy年MM月,但时间内容没填写时显示000年01月。 |
-- 作者:大红袍 -- 发布时间:2016/4/6 9:23:00 -- 请上传具体例子测试。 |
-- 作者:大红袍 -- 发布时间:2016/4/6 9:27:00 -- 1、上传具体foxtable例子。
2、msgbox(fp) 去掉
3、比如 Format(rw("毕业时间"),"yyyy年MM月") 改成 IIF(rw.IsNull("毕业时间"), "", Format(rw("毕业时间"),"yyyy年MM月")) |
-- 作者:大红袍 -- 发布时间: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 -- 发布时间:2016/4/6 16:07:00 -- 谢谢,第1;第2个问题已解决,但第三个问题还是没解决,时间为空值时还是显示0001年01月 |
-- 作者:大红袍 -- 发布时间: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 -- 发布时间:2016/4/6 16:29:00 -- 好了,非常感谢! |