如何根据EXCEL数据自动生成WORD文档?

很多时候,您是否有过在WORD里面重复制作某种资料的工作。比如给定了合同模板,需要根据不同合同内容制作出不同的合同,但模板是一样的。一般情况下就是老老实实的一份一份的去填写(还不保证不会有错误)。那么有没有可以自动生完成的办法呢?答案是肯定有,不然我在这哔哔啥呢!接下来言归正传。在此上个大招,接下来就以合同为例:

1、制作合同模板文件,把合同变量部分用特殊变量替换。图示如下:

2、在EXCEL里面添加合同主要内容数据,图示如下:

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

4、在按钮控件下写如下代码,并将该EXCEL文件另存为XLSM:

Private Sub cmd_makedoc_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_NO As String

Dim side_A As String

Dim side_B As String

i = ActiveCell.Row

contact_NO = Cells(i, 1)

side_A = Cells(i, 2)

side_B = Cells(i, 3)

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 = "{$合同编号}"

.Replacement.Text = contact_NO

End With

.Find.Execute Replace:=wdReplaceAll

With .Find

.Text = "{$甲方}"

.Replacement.Text = side_A

End With

.Find.Execute Replace:=wdReplaceAll

With .Find

.Text = "{$乙方}"

.Replacement.Text = side_B

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

核心技术部分完毕,那么如何使用呢?

1、单击选定需要输出数据制作合同的行的任意单元格。比如我在此选定了第一行中的B2单元格,当然你可以选择该行的任意一单元格。

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

3、打开应用该模板,然后随之弹出生成后的合同另存为的对话框。这里文件名会被自动保存为合同编号。

4、生成完毕。以下是效果

以上是抛砖引玉的一个办法,对于Excel与Word的这种类似交付方式还有很多,比如可以使用更加简单的Word“邮件”功能,也可以使用文档的链接功能,在此就不过多描述。至于使用VBA只是增加另外一种方法而已。

以上功能,仅需对代码中需要替换的部分进行更改,那么基本上可以做到复杂的输出。实际上技术难度没多大,仅仅是利用了Office里面的宏替换原理而已。经过改造,在实际的生产环境中,可以利用EXCEL从其它系统获取数据,然后再批量制作各种WORD文档。

此外,如需了解更多的其它Word与Excel交互的办法,可以移步本人其他文章查看详细过程。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190829A079PA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券