Foxtable(狐表)用户栏目专家坐堂 → 怎么用数据表,循环数据表中的uuid生成目录页呢?


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

主题:怎么用数据表,循环数据表中的uuid生成目录页呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
怎么用数据表,循环数据表中的uuid生成目录页呢?  发帖心情 Post By:2022/3/28 12:31:00 [只看该作者]

 

当前数据表A  有如下数据及字段列值

 
此主题相关图片如下:12.png
按此在新窗口浏览图片

 

目录标准一级标题为:

一、干部基本信息

二、廉政情况综述

三、问题线索处置情况

四、党风廉政意见回复情况

五、民主生活会情况说明情况

六、其他廉政档案资料

 

 (按照一级标题,循环数据表A中的uuid,然后依次按照如下格式生成目录页)

文件类别 + 文件类别名称

文件序号 +文件名称+……+文件编号

怎么生成如下目录格式呢?   麻烦老师指导下  !谢谢!

 
此主题相关图片如下:13.png
按此在新窗口浏览图片

 

 

 

RenderToc类型专门用于生成报表目录,该类型有一个AddItem方法,语法为:

AddItem(目录名称,目录指向的对象,目录层级)

 

 

Dim doc As New PrintDoc
Dim
toc As New prt.RenderToc
Dim
s As String
Dim
rt As New prt.RenderText
toc
.BreakAfter = Prt.BreakEnum.Page
rt.Text =
"目录"
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
s =
"新华网绵阳5月16日电"

doc.Body.Children.Add(rt)

For
n As Integer = 1 to 30
    rt = New prt.RenderText
    rt.Text =
"第" & n & "章"
    doc.Body.Children.Add(rt)
    toc.AddItem(rt.Text, rt,
1)
    For
m As integer = 1 to
10
       
rt = New prt.RenderText
        rt
.Text = s

        doc.Body.Children.Add(rt)
        toc.AddItem(
"第" & m & "节", rt, 2)
   
Next
Next

doc.body.Children.Insert(
1,toc)
doc.Preview()



[此贴子已经被作者于2022/3/28 13:26:59编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106399 积分:541142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/28 13:37:00 [只看该作者]

for each s as string in datatables().getvalues("类别名称","类别序号")
msgbox(s)
for each dr as datarow in datatables().select("类别名称='" & s & "'","文件序号")
msgbox(dr("文件名称"))
next
next

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)for each s as string in datatables...  发帖心情 Post By:2022/3/28 14:27:00 [只看该作者]

老师当前代码如下:还要麻烦老师指导下  如何去掉蓝色的数字2页码  用文件编号代替  及标题往左对齐   谢谢

''''
Dim doc As New PrintDoc
Dim toc As New prt.RenderToc
Dim ss As String
Dim rt As New prt.RenderText
toc.BreakAfter = Prt.BreakEnum.Page
rt.Text = "目录"
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
doc.Body.Children.Add(rt)
For Each s As String() In DataTables("a").getvalues("文件类别|文件类别名称")
    output.show(CLNum(s(0)) & "、" &  s(1))
    rt = New prt.RenderText
    rt.Text = CLNum(s(0)) & "、" &  s(1)
    doc.Body.Children.Add(rt)
    toc.AddItem(rt.Text, rt, 1)
    For Each dr As DataRow In DataTables("a").Select("文件类别名称='" & s(1) & "'","文件序号")
        output.show(dr("文件序号")& "." & dr("文件名称")  & "……" & dr("文件编号"))
        rt = New prt.RenderText
        rt.Text = dr("文件序号")& "." & dr("文件名称")  & "……" & dr("文件编号")
        doc.Body.Children.Add(rt)
        toc.AddItem(rt.Text , rt, 2)
    Next
Next
'doc.Body.Children.Add(rt)

doc.body.Children.Insert(1,toc)
doc.Preview()

代码运行输出效果:


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

代码运行后生成的专业报表目录效果:

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

项目文件:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:目录页.table

[此贴子已经被作者于2022/3/28 14:27:36编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106399 积分:541142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/28 14:47:00 [只看该作者]

1、对齐目录层次一致即可:

RenderToc类型专门用于生成报表目录,该类型有一个AddItem方法,语法为:

AddItem(目录名称,目录指向的对象,目录层级)


toc.AddItem(rt.Text , rt, 2)

改为

toc.AddItem(rt.Text , rt, 1)


2、蓝色的是页码,这个没有办法改


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)1、对齐目录层次一致即可:RenderToc...  发帖心情 Post By:2022/3/28 15:20:00 [只看该作者]

 按老师提示  现在效果如下:【蓝色数字2这个页码部分,不是友好  不想要    有没有办法变通实现呢?】


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

 

老师:那我要实现这个效果   我该用什么方法实现呢?word还是Excel模板?主要是那……部分要能够自动填充对齐

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

[此贴子已经被作者于2022/3/28 15:22:30编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106399 积分:541142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/28 15:33:00 [只看该作者]

那就不要使用additem这种功能,按普通文字使用RenderText逐行添加内容。


比如一行30个字符

'''
Dim a As String = "一、干部基本信息"
Dim b As String = "1-1"
Dim s As String = a & b.PadLeft(30 - a.length,"…")
msgbox(s)

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)那就不要使用additem这种功能,按普通...  发帖心情 Post By:2022/3/28 15:57:00 [只看该作者]

当前代码修正如下:

''''
Dim doc As New PrintDoc
Dim toc As New prt.RenderToc
Dim ss As String
Dim rt As New prt.RenderText
toc.BreakAfter = Prt.BreakEnum.Page
rt.Text = "目录"  & vbcrlf
rt.Style.Font= New Font("方正小标宋简体", 22, FontStyle.Bold)
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
doc.Body.Children.Add(rt)
For Each s As String() In DataTables("a").getvalues("文件类别|文件类别名称")
    output.show(CLNum(s(0)) & "、" &  s(1))
    rt = New prt.RenderText
    rt.Text = CLNum(s(0)) & "、" &  s(1)
    rt.Style.Font= New Font("黑体", 16, FontStyle.Bold)
    doc.Body.Children.Add(rt)
    For Each dr As DataRow In DataTables("a").Select("文件类别名称='" & s(1) & "'","文件序号")
        output.show(dr("文件序号")& "." & dr("文件名称")  & "……" & dr("文件编号"))
        rt = New prt.RenderText
        rt.Style.Font= New Font("宋体", 16, FontStyle.Bold)
        rt.Style.LineSpacing=100
        Dim a As String = dr("文件序号")& "." & dr("文件名称")
        Dim b As String = dr("文件编号")
        Dim sab As String = a & b.PadLeft(30 - a.length,"…")
        rt.Text =  sab
       
        doc.Body.Children.Add(rt)
    Next
Next

doc.body.Children.Insert(1,toc)
doc.Preview()

 

运行结果如下:【对应的目录字样和具体内容字样分成了两页   对应的右端没有对齐   麻烦老师继续指导下   谢谢!】


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

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106399 积分:541142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/28 16:00:00 [只看该作者]

去掉RenderToc的用法

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)去掉RenderToc的用法  发帖心情 Post By:2022/3/28 16:34:00 [只看该作者]

当前代码如下:

''''
Dim doc As New PrintDoc
Dim ss As String
Dim rt As New prt.RenderText
rt.Text = "目录"  & vbcrlf
rt.Style.Font= New Font("方正小标宋简体", 22, FontStyle.Bold)
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center

doc.Body.Children.Add(rt)
For Each s As String() In DataTables("a").getvalues("文件类别|文件类别名称")
    output.show(CLNum(s(0)) & "、" &  s(1))
    rt = New prt.RenderText
    rt.Text = CLNum(s(0)) & "、" &  s(1)
    rt.Style.Font= New Font("黑体", 16, FontStyle.Bold)
    doc.Body.Children.Add(rt)
    For Each dr As DataRow In DataTables("a").Select("文件类别名称='" & s(1) & "'","文件序号")
        output.show(dr("文件序号")& "." & dr("文件名称")  & "……" & dr("文件编号"))
        rt = New prt.RenderText
        rt.Style.Font= New Font("宋体", 16, FontStyle.Bold)
        rt.Style.LineSpacing=200
        Dim a As String = dr("文件序号")& "." & dr("文件名称")
        Dim b As String = dr("文件编号")
        Dim sab As String = a & b.PadLeft(30 - a.length,"…")
        rt.Text =  sab
        doc.Body.Children.Add(rt)
    Next
Next
doc.Preview()

 

 

预览效果:

老师  行间距设定为200 貌似没有效果   对应的1-1之类的没有直接对齐到右端   有没有办法强制对齐  对应的……自动填充  确保每一行都只有一行数据  谢谢!


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

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106399 积分:541142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/28 17:23:00 [只看该作者]

这个主要是数字,符号和中文的字符宽度不一致导致的问题。

或者考虑使用表格填充数据,使用2列,第一列为标题,第二列为编号。中间不要显示省略号

 回到顶部
总数 12 1 2 下一页