首页 > 其他分享 >调用excel数据自动生成word文档

调用excel数据自动生成word文档

时间:2023-09-14 14:35:22浏览次数:38  
标签:Dim word String Text excel Find 文档 End side

应用场景:相信很多时候,您是否有过和博主一样在WORD里面重复制作某种资料的工作。比如给定了一份模板,需要根据不同内容制作出不同的word,但模板是一样的。一般情况下就是老老实实的一份一份的去填写(但人力填写难保证不出错,精力有限)。那么有没有可以自动生完成word的办法呢?答案是肯定有,接下来就以输出一份计算书为例:

工具

本次以博主电脑在用的excel365为例,用VBA调用word控件替换word中。

步骤

1. 首先要有word模板吧;其中需要替换的数据采用特殊变量替换。图示如下:


PS:图中均用{%xxx}的形式表示需要替换的特殊变量。

2. excel里面的添加需要输出的内容数据。图示如下:


PS:图中博主需要输出的数据为标黄色的那列。

3. EXCEL里面打开开发者模式(毕竟要写点代码)。

4. 在EXCEL里面添加一个Active X按钮控件,根据自身需要修改其属性。

5. 打开EXCEL里的VBA编辑器;选择“工具”—“引用”,然后打开加载文件选择框,选择“Microsoft Word16.0 Object Library”这个项目,如下图:

PS:Word项目“Microsoft Word16.0 Object Library”这个必须引用起来,否则后期在执行变量替换时,VBA无法调用Word替换功能。

6. 在刚才加的按钮控件下写如下代码,并将该EXCEL文件另存为XLSM:

Private Sub CommandButton1_Click()
On Error GoTo Err_cmdExportToWord_Click
    Dim objApp As Object 'Word.Application
    Dim objDoc As Object 'Word.Document
    Dim strTemplates As String '模板文件路径名
    Dim strFileName As String '将数据导出到此文件
    Dim i As Integer
    Dim contact_dew As String
    Dim contact_area As String
    Dim contact_flood As String
    Dim side_1 As String
    Dim side_2 As String
    Dim side_3 As String
    Dim side_4 As String
    Dim side_5 As String
    Dim side_6 As String
    Dim side_7 As String
    Dim side_8 As String
    Dim side_9 As String
    Dim side_11 As String
    Dim side_12 As String
    Dim side_13 As String
    Dim side_14 As String

    i = ActiveCell.Column
    contact_dew = Cells(4, i)
    contact_area = Cells(5, i)
    contact_flood = Cells(6, i)
    side_1 = Cells(7, i)
    side_2 = Cells(8, i)
    side_3 = Cells(9, i)
    side_4 = Cells(10, i)
    side_5 = Cells(11, i)
    side_6 = Cells(12, i)
    side_7 = Cells(13, i)
    side_8 = Cells(15, i)
    side_9 = Cells(16, i)
    side_10 = Cells(17, i)
    side_11 = Cells(18, i)
    side_12 = Cells(19, i)
    side_13 = Cells(23, i)
    side_14 = Cells(24, i)
 
    With Application.FileDialog(msoFileDialogFilePicker)
         .Filters.Add "word文件", "*.doc*", 1
         .AllowMultiSelect = False
         If .Show Then strTemplates = .SelectedItems(1) Else Exit Sub
    End With

  '通过文件对话框生成另存为文件名
    With Application.FileDialog(msoFileDialogSaveAs)
        '.InitialFileName = CurrentProject.Path & "\" & contact_NO & ".doc"
        .InitialFileName = contact_NO & ".doc"
        If .Show Then strFileName = .SelectedItems(1) Else Exit Sub
    End With

    '文件名必须包括“.doc”的文件扩展名,如没有则自动加上
    If Not strFileName Like "*.doc" Then strFileName = strFileName & ".doc"
    '如果文件已存在,则删除已有文件
    If Dir(strFileName) <> "" Then Kill strFileName
    '打开模板文件
    Set objApp = CreateObject("Word.Application")
    objApp.Visible = True
    Set objDoc = objApp.Documents.Open(strTemplates, , False)
 
  '开始替换模板预置变量文本
   With objApp.Application.Selection
        .Find.ClearFormatting
        .Find.Replacement.ClearFormatting
        With .Find
             .Text = "{%dew}"
             .Replacement.Text = contact_dew
        End With
        .Find.Execute Replace:=wdReplaceAll
 
        With .Find
             .Text = "{%area}"
             .Replacement.Text = contact_area
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%fl}"
             .Replacement.Text = contact_flood
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%qcda}"
             .Replacement.Text = side_1
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%qcda1}"
             .Replacement.Text = side_2
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%vf}"
             .Replacement.Text = side_3
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%dp}"
             .Replacement.Text = side_4
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%op}"
             .Replacement.Text = side_5
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%cpd}"
             .Replacement.Text = side_6
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%spd}"
             .Replacement.Text = side_7
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%mpl}"
             .Replacement.Text = side_8
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%mpf}"
             .Replacement.Text = side_9
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%twl}"
             .Replacement.Text = side_10
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%twf}"
             .Replacement.Text = side_11
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%twd}"
             .Replacement.Text = side_12
        End With
        .Find.Execute Replace:=wdReplaceAll
        
        With .Find
             .Text = "{%mplo}"
             .Replacement.Text = side_13
        End With
        .Find.Execute Replace:=wdReplaceAll
 
       With .Find
            .Text = "{%twpl}"
            .Replacement.Text = side_14
       End With
       .Find.Execute Replace:=wdReplaceAll
    End With
 
    '将写入数据的模板另存为文档文件
    objDoc.SaveAs strFileName
    objDoc.Saved = True
    MsgBox "计算书生成完毕", vbYes + vbExclamation
Exit_cmdExportToWord_Click:
    If Not objDoc Is Nothing Then objApp.Visible = True
    Set objApp = Nothing
    Set objDoc = Nothing
    Set objTable = Nothing
    Exit Sub
Err_cmdExportToWord_Click:
    MsgBox Err.Description, vbCritical, "出错"
    Resume Exit_cmdExportToWord_Click
End Sub

7.技术部分搞定了,那么咋滴使用呢?

1.单击选定需要输出数据制作合同的行的任意单元格。这个案例中我在此选定了第一行中的F4单元格,当然你可以选择该行的任意一列单元格。此处对应代码块中的

i = ActiveCell.Column

即将excel当前激活的单元格的列数赋值给i这个变量。

PS:同样的,也有“i = ActiveCell.Row”,就是将excel当前激活的单元格的行数赋值给i这个变量。

PPS:excel中激活的单元格就是随便点个位置就表示你“激活”了这个随便点的单元格子。

PPPS:当然也可以使用excel单元格的绝对位置进行赋值。

  1. 单击“CommandButton1”按钮,弹出合同模板选择对话框。在此,选择我们刚才制作好的合同模板。

  1. 打开应用该模板,然后随之弹出生成后的文件另存为的对话框。这里填写所保存文件名。

  2. 生成完毕。以下是效果

后记

以上仅是一个办法,仅需对代码中需要替换的部分进行更改,那么基本上可以做到复杂的输出。实际上技术难度没多大,代码看似挺多,其实很多为变量替换而已,可根据需要自行改造,在实际的生产环境中,可以利用EXCEL从其它的数据系统获取数据,然后再批量制作多种多样WORD文档。

后续有时间的话考虑更新在现有功能上插入图片,并根据模板的图片大小自动调整其插入图片的大小。

标签:Dim,word,String,Text,excel,Find,文档,End,side
From: https://www.cnblogs.com/dravenaxe/p/17702160.html

相关文章

  • Office学习之excel
    报了一个简知学office课程,贵了点,还是能学到不少东西的,当然如果你勤奋好学这些资料网上应该也有,我比较懒。之前也学了一部分,但是前面学后面忘,尤其是excel用的不多的情况下,很快就忘了,就想着把一些知识点记录下来知识点一:数据表格内容叠在一起,一列列的双击太费事,将鼠标放在空白处然......
  • 利用word插入参考文献
    最近写论文牵涉到文献上标引用问题,找到一篇好文章,以保留做引用。写论文要有参考文献,但是每次写论文,遇到的第一个头疼的问题就是参考文献的插入。虽然以前知道word有很强大的插入参考文献的功能,也转载过别人写的经验总结,但是没有实际用过,现在用到了,把暂时遇......
  • 有什么巨好用Excel数据分析技巧?
    当涉及Excel数据分析时,以下是一些非常实用的技巧和功能,供您参考。这里将为您提供关于数据整理、数据清洗、统计分析、可视化和高级分析等方面的技巧。一、数据整理与清洗:导入数据:使用Excel的数据导入功能,将外部数据源(如文本文件、数据库等)导入到工作表中。数据筛选:利用Exce......
  • Excel导出时文件中没有内容,表格是空的,并且后台抛出了下面的错误:No converter for [cla
    【问题描述】Excel导出时文件中没有内容,表格是空的,并且后台抛出了下面的错误:2023-09-1409:48:59.876WARN7---[http-nio-8096-exec-3].m.m.a.ExceptionHandlerExceptionResolver:Failurein@ExceptionHandlercom.cscecnf.common.exception.GlobalExceptionHandler#exce......
  • Excel打印技巧
    1多页打印相同标题有多页需要打印的数据,经过简单设置,就可以在打印时让每一页都有相同的标题行,表格美观而且便于阅读2只打印部分数据工作表中有很多数据,只想打印部分内容3快速调整打印比例结合页面内容和纸张大小,可以缩小或是扩大打印比例4拖动鼠标设置页......
  • 自助点餐管理系统的设计与实现-计算机毕业设计源码+LW文档
    1. 选题目的、意义及研究现状:1.1目的现代科学技术在快速发展、计算机与全球互连网络相连接,使今天的社会进入了以计算机为核心的社会。计算机的出现给我们诸多方面带来了无限的商机与便利。比如餐饮业,网络就发挥了巨大的作用——网上自助点餐。自助点餐为客户提供的是最方便的饮食......
  • 旅游景区景点系统的设计与实现-计算机毕业设计源码+LW文档
    选题意义: 旅游业经过多年的发展,已经从单一的观光旅游发展到目前的一站式旅游方向,呈现多元化趋势,为游客提供旅游观光、户外探险、自由行、住宿等各种服务。旅游业是一个国家综合性服务行业,可以为经济发展提供助力。对于大众来说,通过旅游可以提高生活质量,帮助人们更加有效的完成工......
  • 基于Django的社区疫情管理平台的设计与实现-计算机毕业设计源码+LW文档
    一、研究的背景和意义研究背景:2020年初,新冠疫情在武汉爆发,造成多人感染,社会治安和医疗体系面临巨大挑战。在这前所未有的严峻形式中,国家领导统一指挥,全面部署,积极应对挑战。社区是最小单位,社区防控做好才能取得关键性胜利。在没有经验基础的情况下,各社区除了执行政策条例外,积极摸......
  • 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-云影
    (文章目录)前言幂数加密是一种基于离散对数问题和群论理论的非对称加密算法。它使用一个生成元为质数p的循环群G来进行加密和解密。通常情况下,该算法的安全性建立在离散对数难题上,即找到群G中的一个元素g的k次方等于给定的元素h,其中k为未知数。该算法与RSA加密算法相比,具有更高的......
  • 企业执勤管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要随着信息技术的发展,管理系统越来越成熟,各种企事业单位使用各种类型的管理系统来提高工作效率,从而降低手工劳动的弊端。企业一直以来都非常重视公司信息化的发展,近几年来随着公司规模扩大,业务逐渐增加,企业对员工的管理也愈发的困难。因此,公司提出通过开发基于Idea的企业执......