以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- Word报表与邮件合并相结合生成Word报表 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40305) |
-- 作者:cxabc123 -- 发布时间:2013/9/14 16:19:00 -- Word报表与邮件合并相结合生成Word报表 前段时间介绍了通过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 -- 发布时间:2013/9/14 16:24:00 -- 顶一下,谢谢分享! |
-- 作者:cxabc123 -- 发布时间: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 -- 发布时间:2013/9/14 18:44:00 -- 这么好的帖子,要顶! |
-- 作者:有点甜 -- 发布时间:2013/9/14 19:31:00 -- 暂时用不到,没有认真测试,不过肯定是可以用的,谢谢楼主。 |
-- 作者:cxabc123 -- 发布时间:2013/11/14 11:05:00 -- 自己顶顶,用到的人可以看一下 |
-- 作者:狐狸爸爸 -- 发布时间:2013/11/14 11:16:00 -- 呵呵,好东西,我也顶! |
-- 作者:cxabc123 -- 发布时间:2013/11/14 11:36:00 -- 第一次得到狐把的肯定 |
-- 作者:ztmdnzc -- 发布时间:2013/11/19 14:47:00 -- 狐爸:不能光顶呀,把她集中到ft中才是正事,上次这位狐友提出此类问题时您回复说“这是一个大的工程,目前没有办法实现,以后考虑吧。”,不知考虑的怎么样了?期待中! |