Foxtable(狐表)用户栏目专家坐堂 → word报表的问题


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

主题:word报表的问题

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


加好友 发短信
等级:一尾狐 帖子:411 积分:4938 威望:0 精华:0 注册:2012/11/16 8:21:00
word报表的问题  发帖心情 Post By:2021/12/1 22:44:00 [只看该作者]

老师,我用word模板生成一套练习题,试题2为远程图片链接,如数据库所示,现在问题有两个
1是每个题目的图片始终是第一题的图片,始终重复,以后的不显示
2是图片前面还是有一个小问号,不知怎么替换掉


数据库字段及最后的效果截图:


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


程序代码:
以下内容为程序代码:

1 Dim tm As String = ProjectPath & "Attachments\试题.doc" '指定模板文件
2 Dim fl As String = ProjectPath & "Reports\试题.doc" '指定目标文件
3 Dim wrt As New WordReport(Tables("基础库_数据导入"),tm,fl) '定义一个WordReport
4 Dim m As Integer
5 For Each r As Row In Tables("基础库_数据导入").rows '逐行生成报表
6 m=m+1
7 output.show("第" & m & "个,共" & CurrentTable.Rows.count & "个")
8 '标题开始
9 Dim st As String
10 Dim st2 As String
11 st=r("a").replace(chr(10),"")'逐行累计
12 st2=r("b").replace(chr(10),"")
13 If st2.Trim().Length>0 Then '如果有图片
14 Dim d As Date = Date.Now()
15 Dim sj As String =d.Hour & d.Minute & d.Second
16 Dim wjm As String="c:\data\" &sj & FileSys.GetName(st2)
17 Network.DownloadFile(st2,wjm )
18 wrt.ReplaceOne("[试题]",st.replace(chr(10),"") & vbcrlf)
19 Dim img As Image = GetImage(wjm)
20 If img.width>400 Then
21 wrt.ReplaceWithImage("[试题2]",wjm,400,400*img.height/img.width)
22 Else
23 wrt.ReplaceWithImage("[试题2]",wjm,img.width,img.height)
24 End If
25 Else
26 wrt.ReplaceOne("[试题]",st)
27 wrt.ReplaceOne("[试题2]","")
28 End If
29 '标题结束 '答案开始
30
31 '解析结束
32 wrt.BuildOne(r)
33 Next
34 wrt.Show() '显示报表



word模板为:

[试题] [试题2]


[此贴子已经被作者于2021/12/1 22:45:22编辑过]

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


加好友 发短信
等级:超级版主 帖子:106067 积分:539428 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 9:18:00 [只看该作者]

麻烦下次发代码直接贴出来即可,不要发这种有行号的代码,看着费劲。

18 wrt.ReplaceOne("[试题]",st.replace(chr(10),"") )
wrt.ReplaceOne("[试题2]","[试题3]")
19 Dim img As Image = GetImage(wjm)
20 If img.width>400 Then
21 wrt.ReplaceWithImage("[试题3]",wjm,400,400*img.height/img.width)
22 Else
23 wrt.ReplaceWithImage("[试题3]",wjm,img.width,img.height)
24 End If
25 Else

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


加好友 发短信
等级:一尾狐 帖子:411 积分:4938 威望:0 精华:0 注册:2012/11/16 8:21:00
  发帖心情 Post By:2021/12/2 16:03:00 [只看该作者]

老师我有几千道题,我这么改,老师看看有啥问题吗?出不来图片呢

Dim tm As String  = ProjectPath & "Attachments\试题.doc" '指定模板文件
Dim fl As String = ProjectPath & "Reports\试题.doc" '指定目标文件
Dim wrt As New WordReport(Tables("基础库_数据导入"),tm,fl) '定义一个WordReport
Dim m As Integer
For Each r As Row In Tables("基础库_数据导入").rows '逐行生成报表
    m=m+1
    output.show("第" & m & "个,共" &  CurrentTable.Rows.count & "个")
    '标题开始
    Dim st As String
    Dim st2 As String
    st=r("a").replace(chr(10),"")'逐行累计
    st2=r("b").replace(chr(10),"")
    If st2.Trim().Length>0 Then '如果有图片
        Dim d As Date = Date.Now()
        Dim sj As String =d.Hour & d.Minute & d.Second
        Dim wjm As String="c:\data\" &sj & FileSys.GetName(st2)
        Network.DownloadFile(st2,wjm )
        wrt.ReplaceOne("[试题]",st.replace(chr(10),"") & vbcrlf)
        wrt.ReplaceOne("[试题2]","[试题" & m & "]")
        Dim img As Image = GetImage(wjm)
        If img.width>400 Then
            output.show("into2")
            wrt.ReplaceWithImage("[试题" & m & "]",wjm,400,400*img.height/img.width)
        Else
            output.show("into3")
            wrt.ReplaceWithImage("[试题" & m & "]",wjm,img.width,img.height)
        End If
    Else
        output.show("into")
        wrt.ReplaceOne("[试题]",st)
        wrt.ReplaceOne("[试题" & m & "]","")
    End If
    '标题结束 '答案开始
    
    '解析结束
    wrt.BuildOne(r)
Next
wrt.Show() '显示报表

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


加好友 发短信
等级:超级版主 帖子:106067 积分:539428 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 16:10:00 [只看该作者]

不要画蛇添足,就按照2楼使用即可,2个名称就够了"[试题2]","[试题3]"

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


加好友 发短信
等级:一尾狐 帖子:411 积分:4938 威望:0 精华:0 注册:2012/11/16 8:21:00
  发帖心情 Post By:2021/12/2 16:33:00 [只看该作者]

老师,现在这个代码,第一题是数据库第二题的图片,第二题是数据库第三题的图片,错位了,最后一题没有图片
Dim tm As String  = ProjectPath & "Attachments\试题.doc" '指定模板文件
Dim fl As String = ProjectPath & "Reports\试题.doc" '指定目标文件
Dim wrt As New WordReport(Tables("基础库_数据导入"),tm,fl) '定义一个WordReport
Dim m As Integer
For Each r As Row In Tables("基础库_数据导入").rows '逐行生成报表
    m=m+1
    output.show("第" & m & "个,共" &  CurrentTable.Rows.count & "个")
    '标题开始
    Dim st As String
    Dim st2 As String
    st=r("a").replace(chr(10),"")'逐行累计
    st2=r("b").replace(chr(10),"")
    If st2.Trim().Length>0 Then '如果有图片
        Dim d As Date = Date.Now()
        Dim sj As String =d.Hour & d.Minute & d.Second
        Dim wjm As String="c:\data\" &sj & FileSys.GetName(st2)
        Network.DownloadFile(st2,wjm )
        wrt.ReplaceOne("[试题]",st.replace(chr(10),""))
        wrt.ReplaceOne("[试题2]","[试题3]")
        Dim img As Image = GetImage(wjm)
        If img.width>400 Then
            wrt.ReplaceWithImage("[试题3]",wjm,400,400*img.height/img.width)
        Else
            wrt.ReplaceWithImage("[试题3]",wjm,img.width,img.height)
        End If        
    Else
        output.show("into")
        wrt.ReplaceOne("[试题]",st)
       wrt.ReplaceOne("[试题3]","")
    End If
    wrt.BuildOne(r)
Next
wrt.Show() '显示报表
[此贴子已经被作者于2021/12/2 16:34:31编辑过]

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


加好友 发短信
等级:超级版主 帖子:106067 积分:539428 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 17:09:00 [只看该作者]

试了,这个确实没有办法。建议还是使用execl报表吧。或者专业报表

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


加好友 发短信
等级:一尾狐 帖子:411 积分:4938 威望:0 精华:0 注册:2012/11/16 8:21:00
  发帖心情 Post By:2021/12/2 17:41:00 [只看该作者]

老师,专业报表可以生成word吗?

 
还有[&照片,130,160],这种表达式,怎么写插入的是原图?我并不清楚每个图片的尺寸,固定的尺寸并不能用啊
[此贴子已经被作者于2021/12/2 17:45:59编辑过]

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


加好友 发短信
等级:超级版主 帖子:106067 积分:539428 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 20:22:00 [只看该作者]

专业报表无法生成word。

模板引用图片只能固定尺寸。

每个功能都有自己的优缺点。

如果说一点要输出word文档,只能是学学word vba,自己完全使用代码填充数据了。

 回到顶部