Foxtable(狐表)用户栏目专家坐堂 → Word报表与邮件合并相结合生成Word报表


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

主题:Word报表与邮件合并相结合生成Word报表

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


加好友 发短信
等级:四尾狐 帖子:810 积分:5250 威望:0 精华:0 注册:2009/2/6 10:38:00
Word报表与邮件合并相结合生成Word报表  发帖心情 Post By:2013/9/14 16:19:00 [只看该作者]

 前段时间介绍了通过fox操控word直接生成word报表,但是出现了一个问题,字符超过255字时,不能正常,现在通过测试,把fox直接操控word和邮件合并方式相结合可生成word报表,代码分享如下:



'操控Word文档,主要是文档合并

'*******************************

'*********以下代码可修改**********

Dim FileName = "任免审批表.doc"   '定义模版文件名

Dim Ctn As String = "干部信息"  '当前表表名,通用格式Functions.Execute("CurrentTableName")

Dim Tb As Table = Tables(Ctn)   '定义当前表,通用.

 

'*********以上代码可修改**********

'*******************************

 

on error resume Next

If FileSys.DirectoryExists(ProjectPath & "Reports\") = False Then   '如果Reports文件夹不存在

    FileSys.CreateDirectory(ProjectPath & "Reports\")    '创建Reports文件夹

End If

Dim App As New MSWord.Application    '定义MSWord

 

'获得模版

FileSys.CopyFile(ProjectPath & "Attachments\" & FileName, ProjectPath & "Reports\" & FileName,True)

Dim nDoc = App.Documents.Open(ProjectPath & "Reports\" & FileName)

Dim rng As MSWord.Range = App.Documents(FileName).Range

rng.Select()   '全选

rng.Copy()   '拷贝

nDoc.Activate()

 

'插入文段


 

'***********************************************

'*********以下是代码主体部分,需要修改**********

 

 

App.Selection.Find.ClearFormatting()

App.Selection.Find.Text = "《姓名》"

App.Selection.Find.Replacement.ClearFormatting()

App.Selection.Find.Replacement.Text = cr("姓名")

App.Selection.Find.Execute(Replace:=MSWord.WdReplace.wdReplaceAll)

 

 

App.Selection.Find.ClearFormatting()

App.Selection.Find.Text = "《出生年月》"

App.Selection.Find.Replacement.ClearFormatting()

If cr.IsNull("出生年月") = False Then

    App.Selection.Find.Replacement.Text = Format(cr("出生年月"),"yyyy.MM")

Else

    App.Selection.Find.Replacement.Text = ""

End If

App.Selection.Find.Execute(Replace:=MSWord.WdReplace.wdReplaceAll)

 

App.Selection.Find.ClearFormatting()

App.Selection.Find.Text = "《年龄》"

App.Selection.Find.Replacement.ClearFormatting()

If cr.IsNull("年龄") = False Then

    App.Selection.Find.Replacement.Text = Format(cr("年龄"),"0")

Else

    App.Selection.Find.Replacement.Text = ""

End If

App.Selection.Find.Execute(Replace:=MSWord.WdReplace.wdReplaceAll)

 

rng.Find.ClearFormatting()

If rng.Find.Execute("《照片》") Then

    rng.Select()

    If FileSys.FileExists(ProjectPath & "Attachments\照片\" & cr("照片")) Then

        App.Selection.InlineShapes.AddPicture(ProjectPath & "Attachments\照片\" & cr("照片"))

    End If

    rng = App.Documents(FileName).Range

    rng.Select()

End If

 

 

'*********以上是代码主体部分,需要修改**********

'**********************************************

 

If Tb.Rows.Count > 0 Then

    Dim Book As New XLS.Book(ProjectPath & "Attachments\Word任免审批表数据源.xls")

    Dim fl As String = ProjectPath & "Reports\Word任免审批表数据源.xls"

    Book.Build() '生成细节区

    Book.Save(fl) '保存工作簿

End If

 

nDoc.Activate()

nDoc.MailMerge.OpenDataSource(Name:= ProjectPath & "Reports\Word任免审批表数据源.xls",SQLStatement:="SELECT * FROM `干部信息$`")   '链接数据源

App.Documents.Open(ProjectPath & "Reports\" & FileName)   '再次打开Word模版

nDoc.MailMerge.Execute()

nDoc.Close(False)

[此贴子已经被作者于2013-9-14 16:20:31编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/14 16:24:00 [只看该作者]

顶一下,谢谢分享!

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


加好友 发短信
等级:四尾狐 帖子:810 积分:5250 威望:0 精华:0 注册:2009/2/6 10:38:00
  发帖心情 Post By:2013/9/14 16:29:00 [只看该作者]

以下代码是把Excel 报表和邮件合并相结合的一种方式直接生成word报表 



'Word邮件合并主要是针对Excel报表数据源设计

'*******************************

'*********以下代码可修改**********

Dim FileName = "任免审批表.doc"   '定义模版文件名

Dim Ctn As String = "干部信息"  '当前表表名,通用格式Functions.Execute("CurrentTableName")

Dim Tb As Table = Tables(Ctn)   '定义当前表,通用.

 

'*********以上代码可修改**********

'*******************************

 

If Tb.Rows.Count > 0 Then

    Dim Book As New XLS.Book(ProjectPath & "Attachments\Word任免审批表数据源.xls")

    Dim fl As String = ProjectPath & "Reports\Word任免审批表数据源.xls"

    Book.Build() '生成细节区

    Book.Save(fl) '保存工作簿

End If

 

Dim App As New MSWord.Application    '定义MSWord

FileSys.CopyFile(ProjectPath & "Attachments\" & FileName, ProjectPath & "Reports\" & FileName,True)

Dim nDoc = App.Documents.Open(ProjectPath & "Reports\" & FileName)   '定义Word模版

nDoc.Activate()

nDoc.MailMerge.OpenDataSource(Name:= ProjectPath & "Reports\Word任免审批表数据源.xls",SQLStatement:="SELECT * FROM `干部信息$`")   '链接数据源,这是最关键的一句,注意标点符号`干部信息$`

App.Documents.Open(ProjectPath & "Reports\" & FileName)   '再次打开Word模版

nDoc.MailMerge.Execute()

nDoc.Close(False)

 

'*******************************

'*******************************

[此贴子已经被作者于2013-9-14 16:29:28编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/9/14 18:44:00 [只看该作者]

这么好的帖子,要顶!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/9/14 19:31:00 [只看该作者]

 暂时用不到,没有认真测试,不过肯定是可以用的,谢谢楼主。

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


加好友 发短信
等级:四尾狐 帖子:810 积分:5250 威望:0 精华:0 注册:2009/2/6 10:38:00
  发帖心情 Post By:2013/11/14 11:05:00 [只看该作者]

自己顶顶,用到的人可以看一下

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/14 11:16:00 [只看该作者]

呵呵,好东西,我也顶!

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


加好友 发短信
等级:四尾狐 帖子:810 积分:5250 威望:0 精华:0 注册:2009/2/6 10:38:00
  发帖心情 Post By:2013/11/14 11:36:00 [只看该作者]

第一次得到狐把的肯定

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


加好友 发短信
等级:二尾狐 帖子:501 积分:4167 威望:0 精华:0 注册:2013/1/18 13:34:00
  发帖心情 Post By:2013/11/19 14:47:00 [只看该作者]

狐爸:不能光顶呀,把她集中到ft中才是正事,上次这位狐友提出此类问题时您回复说“这是一个大的工程,目前没有办法实现,以后考虑吧。”,不知考虑的怎么样了?期待中!

 回到顶部