在很多工作中,经常需要写一些类似的报告,使用同一个模板,只是里面的数据不同,人工操作工程量大且容易出错,如果能用程序直接实现可以省去不少麻烦。

本文使用ExcelVBA实现,主要思路是使用word邮件合并功能,将word文字报告与Excel数据链接,不太了解邮件合并功能的戳:http://xinzhi.wenda.so.com/a/1517858371619706

1,创建一个word文档作为模板,存为doc格式。

2,创建一个Excel存放数据,将数据的名称输入至sheet2第一行,保存为xlsm格式

以sheet1为源数据表

3,打开word采用邮件合并功能将刚刚创建的word模板与Excel数据文件链接,选择sheet2

插入合并域

4,打开Excel的vb编辑器,插入模块,在模块中输入以下代码:

1 Submerge()2 Dim sh1 AsWorksheet3 Set sh1 = Worksheets("Sheet1")4 Dim sh2 AsWorksheet5 Set sh2 = Worksheets("Sheet2")6 ‘将sheet1的数据转换到sheet2中7 sh2.Range("A2") = sh1.Range("B1") '姓名

8 sh2.Range("B2") = sh1.Range("B2") '年龄

9 ThisWorkbook.Save’保存10 CalloutPut’调用邮件合并程序11 End Sub

12

13

14

15 Private SuboutPut() ’邮件合并程序16    On Error GoToerrorhandle:17 Dim Wordapp AsWord.Application18 Dim WordD AsWord.Document19 Dim Modelpath As String

20 Set Wordapp = NewWord.Application21 Modelpath = ThisWorkbook.Path & "\模板.doc"’模板地址22 ThisWorkbookPath = ThisWorkbook.Path & "\数据.xlsm"’数据文件地址,与模板文件在同一路径下23

24 Set WordD = Wordapp.Documents.Open(Modelpath) '打开模板

25 Wordapp.Visible = True '设置为可见

26

27 '链接数据

28 WordD.MailMerge.OpenDataSource Name:=_29 ThisWorkbookPath _30 , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _31 AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _32 WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _33 Format:=wdOpenFormatAuto, Connection:=_34 "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=ThisWorkbookPath;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engin"_35 , SQLStatement:="SELECT * FROM `Sheet2$`", SQLStatement1:="", SubType:=_36 wdMergeSubTypeAccess37 '生成文档

38 WithWordD.MailMerge39 .Destination =wdSendToNewDocument40 .SuppressBlankLines = True

41 With.DataSource42 .FirstRecord =wdDefaultFirstRecord43 .LastRecord =wdDefaultLastRecord44 End With

45 .Execute Pause:=False

46 End With

47

48 WordD.Close '关闭文档

49 Set WordD = Nothing

50 Set Wordapp = Nothing

51 Exit Sub

52    errorhandle:53 MsgBox ("程序出现运行错误!")54 End Sub

5,点工具-引用,引用office等工程文件

6,运行宏程序merge

-----------------------------------------------------------批量操作------------------------------------------------------------------------------

当有多个word需要用到同一个数据表时,可以在模块中使用以下代码实现批量输入,程序自动保存至excel同目录下输出文件夹中:

1 Submerge()2 Dim sh1 AsWorksheet3 Set sh1 = Worksheets("Sheet1")4 Dim sh2 AsWorksheet5 Set sh2 = Worksheets("Sheet2")6 Dim Modelpath As String

7 Dim ThisWorkbookPath As String

8 Dim SaveFilePath, SaveFileName As String

9

10 ‘将sheet1的数据转换到sheet2中11 sh2.Range("A2") = sh1.Range("B1") '姓名

12 sh2.Range("B2") = sh1.Range("B2") '年龄

13 ThisWorkbook.Save’保存14

15 ThisWorkbookPath = ThisWorkbook.Path & "\数据.xlsm"

16 SaveFilePath= ThisWorkbook.Path & "\输出文件夹\"

17 Set FSO = CreateObject("Scripting.FileSystemObject")18 If FSO.FolderExists(SaveFilePath) = False Then

19 MkDir SaveFilePath '//创建文件夹

20 End If

21 for i=1 to 3‘模板个数22 Modelpath = ThisWorkbook.Path & "\模板文件夹\模板" & i &“.doc”23 SaveFileName =”输出” &i24 CalloutPut(Modelpath, ThisWorkbookPath, SaveFilePath, SaveFileName)25 nexti26 End Sub

27

28

29 Private Sub outPut(ByVal Modelpath As String, ByVal ThisWorkbookPath As String, ByVal SaveFilePath As String, ByVal SaveFileName As String)30 On Error GoToerrorhandle:31 Dim Wordapp AsWord.Application32 Dim WordD AsWord.Document33 Set Wordapp = NewWord.Application34

35 Set WordD =Wordapp.Documents.Open(Modelpath)36 Wordapp.Visible =Visible37

38 WordD.MailMerge.OpenDataSource Name:=_39 ThisWorkbookPath _40 , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _41 AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _42 WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _43 Format:=wdOpenFormatAuto, Connection:=_44 "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=ThisWorkbookPath;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engin"_45 , SQLStatement:="SELECT * FROM `Sheet2$`", SQLStatement1:="", SubType:=_46 wdMergeSubTypeAccess47 '生成文档

48 WithWordD.MailMerge49 .Destination =wdSendToNewDocument50 .SuppressBlankLines = True

51 With.DataSource52 .FirstRecord =wdDefaultFirstRecord53 .LastRecord =wdDefaultLastRecord54 End With

55 .Execute Pause:=False

56 End With

57

58 WordD.Close '关闭文档

59 a =Wordapp.ActiveDocument.Name60

61 'Wordapp.Windows("套用信函 1[兼容模式]").Activate

62 Wordapp.ChangeFileOpenDirectory SaveFilePath63 Wordapp.ActiveDocument.SaveAs Filename:=SaveFileName, _64 FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _65 AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _66 EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _67 :=False, SaveAsAOCELetter:=False '保存

68 Wordapp.ActiveDocument.Close69

70 Set WordD = Nothing

71 Wordapp.Quit72 Exit Sub

73 errorhandle:74 MsgBox ("程序出现运行错误!")75 End Sub

如果文件名没有规律,可以逐个调用outPut方法,输出结果:

本文outPut方法可以结合更多操作方式来实现批量撰写报告~

linux vtune 生成文字报告,ExcelVBA实现一键生成word文字报告及批量操作[原创]相关推荐

  1. ExcelVBA实现一键生成word文字报告及批量操作[原创]

    在很多工作中,经常需要写一些类似的报告,使用同一个模板,只是里面的数据不同,人工操作工程量大且容易出错,如果能用程序直接实现可以省去不少麻烦. 本文使用ExcelVBA实现,主要思路是使用word邮件 ...

  2. ui标注生成html,自动标注一键生成,手动标注自由补充

    熬着夜手动做标注? 用工具自动标注,却被攻城狮追命连环call? 设计稿标注--其实--可以「自动+手动」! 助你五星通过标注大关~ 为什么标注需要「自动+手动」? 手动标注到自动标注,在设计界是有一 ...

  3. python 加干扰线 图片生成_用Python一键生成炫酷九宫格图片,火了朋友圈

    作为一个男同胞来说,为了给女朋友拍一张美美的照片,着实需要花费很大的时间和精力,不仅仅需要从众多的图片中精心挑选,而且还需要有着超强的图片精修能力,才能得到一张张达到女友要求的图片,真心不容易啊- 朋 ...

  4. ppt拼图 批量生成 N多ppt一键生成拼图

    我们办公中经常用到PPT插件islide里的PPT拼图,可以一个个手工把ppt生成ppt拼图效果,如果想批量把几十上百个ppt一次性生成拼图效果,islide就实现不了. 这是开发的PPT批量执行拼图 ...

  5. sketch生成android布局,Sketch一键生成自适应按钮及布局Compo

    提取码:0czh 安装 下载并解压 Compo.zip 双击 Compo.sketchplugin 完成安装 使用 选中目标图层 执行 Plugins > Compo > Create C ...

  6. 最新版一键生成小程序系统 前段源码 小程序开发者必备

    [实例简介] 需要认证的微信公众号 申请微信支付接口 1.一键生成小程序自动化平台,自动购买和发货 2.支持二次开发 3.支持代理商 4.29个小程序完整 5.带配置教程 小程序生成平台源码 一键生成 ...

  7. 如何一键生成c语言流程图或NS图(只适用于学生完成日常作业)

    1.宝藏app(AutoFlowchart),从度娘就可以下载,为了防止大家下载病毒,这里我直接给出链接 https://www.mydown.com/soft/133/473307133.shtml ...

  8. 【科研绘图】3dmax一键生成太阳系插件SolarSystem使用方法详解

    3DMAX太阳系恒星系建模插件(一键生成太阳系插件),太阳系(恒星系)参数化建模并生成动画插件.该插件提供了恒星.行星.卫星.小行星带和彗星的生成功能. [主要功能特性] --太阳系的参数化建模 -- ...

  9. linux一键电影网站脚本,Linux下HTML5播放器一键生成脚本

    原创内容,转载请注明出处: https://www.myzhenai.com.cn/post/2394.html https://www.myzhenai.com/thread-17969-1-1.h ...

最新文章

  1. php网站后台管理反应慢,phpcmsv9 后台操作反应慢的原因
  2. 基于 Lucene 的桌面文件搜索
  3. Vue组件的生命周期
  4. Python爬虫开发:Request的使用(随机User-Agent)
  5. 30分钟快速搭建移动应用直传OSS服务
  6. visual studio 2005中生成网站和发布网站区别
  7. 从身份证管理系统思考企业CMDB的建设
  8. 苹果手机如何隐藏软件_手机资讯:苹果软件下载演示
  9. YDUI Touch +mescroll上拉加载测试
  10. 人大金仓助力广东融合创新智慧校园建设与网络安全交流会成功举办
  11. InstallShield vs2015 的安装与激活
  12. android 应用被系统回收,莫往Applicaotion存缓存/app被系统回收之后再打开发生了什么...
  13. 将Chrome插件Momentum背景图片设为桌面壁纸
  14. mysql跨服务器触发器
  15. 使用火绒后连接FTP服务器失败
  16. 单体内置对象_js基础-单体内置对象(Global、Math)
  17. 用c语言实现mfc系统,MFC实现学生选课系统
  18. 树莓派4B接4K60p显示器要点
  19. 基于Java毕业设计养老智慧服务平台源码+系统+mysql+lw文档+部署软件
  20. 【幻灯片制作软件】Focusky教程 | 怎么有效利用图片幻灯片 ?

热门文章

  1. 面试官:你封装过组件吗?说一下你是在vue项目里如何封装组件的?
  2. linux用xmind打开图形界面,[已解决]安装 XMind 后,启动报错。
  3. 超频到3200最佳时序_全网性价比最高:威刚龙耀D50新品内存,为超频而生
  4. 拒绝黄牛党,掌握一手资讯,爬虫都能搞定
  5. FX3U源码V10.0
  6. 张小龙微信十年,21个精华观点和解读
  7. mysql索引创建规则、联合与一般索引、执行计划、索引选择,索引重建与下推
  8. 全球及中国热敏纸高耐热显影剂行业研究及十四五规划分析报告
  9. 深度学习的可解释性 github_机器学习模型可解释性实战-预测世界杯当场最佳
  10. linux进程tsm是什么,Linux 下安装和配置TSM 7.1