以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 专业报表写入数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128748)
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/14 9:37:00
-- 专业报表写入数据
老师您好,想做一个入库单打印报表,用EXCEL比较麻烦并且效果不好。想用专业报表做,表打印入库单_TABLE1中有一办理入库是逻辑列,怎么能让下面的代码:
1、办理入库列被选中的就打印,没选中的则不打印。
2、只打印指定的列。
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中 Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To tb.Cols.Count -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = tb.Cols(c).Name \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(c).Width = tb.Cols(c).PrintWidth \'列宽等于实际列宽 If tb.Cols(c).IsNumeric OrElse tb.Cols(c).IsDate Then \'如果是数值或日期列 rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 rt.Cells(r + 1 - tb.TopPosition , c).Text = tb(r,c) Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
|
-- 作者:有点甜
-- 发布时间:2018/12/14 10:08:00
--
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中
Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' Dim Colnames As String() = {"第一列", "第二列"} rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = colnames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(colnames(c)).Width = tb.Cols(colnames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(colnames(c)).IsNumeric OrElse tb.Cols(colnames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(colnames(c)).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If Dim i As Integer = 1 For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 If tb.rows(r)("办理入库") = True Then rt.Cells(i, c).Text = tb(r,colnames(c)) i += 1 End If Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/14 10:33:00
--
For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容
从字符串到length的转换无效。怎么改呢?
|
-- 作者:有点甜
-- 发布时间:2018/12/14 10:39:00
--
贴出你最后写的代码。
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/14 10:44:00
--
以下是引用有点甜在2018/12/14 10:39:00的发言: 贴出你最后写的代码。
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中
Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' Dim Colnames As String() = {"物品名称","规格型号","单位","采购数量","采购单价","采购总价","供货单位"} rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = colnames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(colnames(c)).Width = tb.Cols(colnames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(colnames(c)).IsNumeric OrElse tb.Cols(colnames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(colnames(c)).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If Dim i As Integer = 1 For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 If tb.rows(r)("办理入库") = True Then rt.Cells(i, c).Text = tb(r,colnames(c)) i += 1 End If Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/14 10:56:00
--
以下是引用有点甜在2018/12/14 10:39:00的发言: 贴出你最后写的代码。
NET Framework 版本:2.0.50727.8793 Foxtable 版本:2018.10.9.1 错误所在事件:窗口,打印入库单,Button1,Click 详细错误信息: 从字符串“物品名称”到类型“Integer”的转换无效。 输入字符串的格式不正确。
|
-- 作者:有点甜
-- 发布时间:2018/12/14 12:47:00
--
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中
Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' Dim Colnames As String() = {"物品名称","规格型号","单位","采购数量","采购单价","采购总价","供货单位"} rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = colnames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(c).Width = tb.Cols(colnames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(colnames(c)).IsNumeric OrElse tb.Cols(colnames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If Dim i As Integer = 1 For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 If tb.rows(r)("办理入库") = True Then rt.Cells(i, c).Text = tb.Rows(r)(colnames(c)) i += 1 End If Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/27 8:16:00
--
以下是引用有点甜在2018/12/14 12:47:00的发言:
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中
Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' Dim Colnames As String() = {"物品名称","规格型号","单位","采购数量","采购单价","采购总价","供货单位"} rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = colnames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(c).Width = tb.Cols(colnames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(colnames(c)).IsNumeric OrElse tb.Cols(colnames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If Dim i As Integer = 1 For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 If tb.rows(r)("办理入库") = True Then rt.Cells(i, c).Text = tb.Rows(r)(colnames(c)) i += 1 End If Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
不管选中几条记录,都只打印一条记录,怎么改呢?
[此贴子已经被作者于2018/12/27 8:16:43编辑过]
|
-- 作者:nxqtxwz
-- 发布时间:2018/12/27 8:25:00
--
Dim doc As New PrintDoc \'定义一个新报表 Dim rt As New prt.RenderTable \'定义一个新表格 Dim rs As New prt.RenderText() \'定义一个文本对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 rt1.Style.Spacing.Top = 1 \'表格和前面对象的垂直间隔为1毫米 rt1.Style.Spacing.Bottom = 1 \'表和和后续对象的垂直间隔为1毫米
rs.Text = "青铜峡市铝业学校入库单" \'设置文本对象的内容 rs.Style.Font = New Font("宋体", 16 , FontStyle.Bold) \'设置文本对象的字体 rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 doc.Body.Children.Add(rt1) \'将表格对象加入到报表中 rs = New prt.RenderText() \'再次定义一个文本对象 rs.Text = "上面的表格有三行三列,此行文本和表格的距离是10毫米" doc.Body.Children.Add(rs) \'将文本对象加入到表格中
Dim tb As Table = Tables("打印入库单_Table1") \'.Cols("办理入库") = \'True\' Dim Colnames As String() = {"物品名称","规格型号","单位","采购数量","采购单价","采购总价","供货单位"} rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To Colnames.length -1 \'逐列设置和填入内容 rt.Cells(0,c).Text = colnames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(c).Width = tb.Cols(colnames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(colnames(c)).IsNumeric OrElse tb.Cols(colnames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If Dim i As Integer = 1 For r As Integer = tb.TopPosition To tb.BottomPosition \'开始填入该列内容 If tb.rows(r)("办理入库") = True Then rt.Cells(i, c).Text = tb.Rows(r)(colnames(c)) i=i+1 End If Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头 doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
总是打印当前行并且"办理入库" = True的一条记录。
1、如果"办理入库" = True但不是当前行不能打印。
2、如果是当前行但"办理入库" <> True的记录也不打印。
我的目的是:打印"办理入库" = True的所有记录。
[此贴子已经被作者于2018/12/27 8:29:38编辑过]
|
-- 作者:有点甜
-- 发布时间:2018/12/27 9:14:00
--
是不是你表名写错了?或者是你操作错了表格?
Dim tb As Table = Tables("打印入库单_Table1")
代码是没问题的。请认真测试。
如果确实自己不会排错,实例发上来。
|