基于VBA实现Excel和Word之间的数据传递
2019-05-23张文晓
张文晓
摘要 :本文主要介绍了两种Excel和Word之间的交互方式,一个是从Word文档中读取数据导入到Excel中做处理,另一个是利用Excel操作Word文档,实现Word文档的组装,从而使用户能灵活地定制工作流程。
关键词:Excel;VBA;Word;数据导入;组装
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2019)08-0201-04
开放科学(资源服务)标识码(OSID):
Data Transfer between Excel and Word Based on VBA
ZHANG Wen-xiao
(Ingersoll Rand Engineering Technology Center-Asia Pacific, Suzhou 215400, China)
Abstract: This paper mainly introduces two ways of interaction between Excel and Word, one is to import data from Word documents into Excel for processing, the other one is to use Excel to manipulate Word documents to realize the assembly of Word documents, so that users can flexibly customize the workflow.
Keywords: Excel; VBA; Word; Data Import; Assemble
Excel和Word是大家最熟悉的日常办公软件。Excel的特点是便于数据的计算和统计,Word的特点方便文字的编辑和排版。多数情况下,人们都是在单独某一个软件下工作,二则似乎“井水不犯河水”。但随着大数据时代的来临,批量化操作、定制化操作的需求越来越迫切。下面试举两例:
1) 可以想象一下,如果你有上百个word文档,每一个文档,可能代表一个产线上反馈的问题,而你想把这些word文档中的信息进行汇总、分析。如果采用传统的操作,那么只能逐一打开这些文档,然后将数据手动地复制、粘贴到Excel中进行处理。如果能从Excel中批量读取这些信息,那么是不是会事半功倍?
2) 每个企业都有自己的操作规范,一般地,这些操作规范等内容会被存在一个word文档里,我们暂且称之为“总则”。但是,往往具体的项目需要定制化的操作流程,我们当然可以到“总则”里找到相应地操作,就像我们写文章的时候每个字都可以从字典中查到一样。但那样效率会很低,因为“总则”里有一些和这个项目无关的操作。这样,如果我们把“总则”拆分成若干“细则”,即拆分若干个word文档,再根据具体项目,在Excel配置所需的“细则”,最后由程序“组装”这些细则,那么就可以形成高度定制化地、灵活地项目操作规范。技术上,就是把由用户自由定制的word文档,通过程序组装成一个针对某一项目的操作流程。此过程相当于把数据,由打包存储、大海捞针式查找,转换成离散存储、按需组合。同时,某个word文档可能被多个工作流程引用,如果更新这个word文档的内容,那么相关的工作流程都会被更新,从而实现更加方便地维护。
下面针对上述内容,详细说明如何实现。
1 解决方案
1.1 VBA中Word对象基础
1.1.1 新建Word引用
我们对Excel VBA都不陌生,但在Excel里操作Word可能接触比较少,那么首先让我们来了解一下Word对象的基础知识。
首先需要创建一个对 Word Application 对象的引用。在VBA中,工具→引用,选取“MicroSoft Word 15.0 Object Library”。如下图所示。
图1 VBA中引用Word Application
方法一:New Word.Application
Dim Wordapp As Word.Application
Set Wordapp = NewWord.Application
Wordapp.Visible = True '可见
Dim WordD As Word.Document '定义word类
Set WordD = Wordapp.Documents.Add '新建文档
'Set WordD = Wordapp.Documents.open(filename) '打开文档
'……
WordD.Close '关闭文档
Set WordD = Nothing
WordApp.Quit '退出Word对象
方法二:CreateObject
Dim WordApp As Object
Set WordApp =CreateObject("Word.Application") '新建Word對象
方法三:GetObject
文件已打开的情况下,使用:SetWordD=GetObject(filename),可建立对文档的引用,如果文件没有打开,则还需要先用方法一或二来操作。