張文曉
摘要 :本文主要介紹了兩種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的特點是便于數據的計算和統(tǒng)計,Word的特點方便文字的編輯和排版。多數情況下,人們都是在單獨某一個軟件下工作,二則似乎“井水不犯河水”。但隨著大數據時代的來臨,批量化操作、定制化操作的需求越來越迫切。下面試舉兩例:
1) 可以想象一下,如果你有上百個word文檔,每一個文檔,可能代表一個產線上反饋的問題,而你想把這些word文檔中的信息進行匯總、分析。如果采用傳統(tǒng)的操作,那么只能逐一打開這些文檔,然后將數據手動地復制、粘貼到Excel中進行處理。如果能從Excel中批量讀取這些信息,那么是不是會事半功倍?
2) 每個企業(yè)都有自己的操作規(guī)范,一般地,這些操作規(guī)范等內容會被存在一個word文檔里,我們暫且稱之為“總則”。但是,往往具體的項目需要定制化的操作流程,我們當然可以到“總則”里找到相應地操作,就像我們寫文章的時候每個字都可以從字典中查到一樣。但那樣效率會很低,因為“總則”里有一些和這個項目無關的操作。這樣,如果我們把“總則”拆分成若干“細則”,即拆分若干個word文檔,再根據具體項目,在Excel配置所需的“細則”,最后由程序“組裝”這些細則,那么就可以形成高度定制化地、靈活地項目操作規(guī)范。技術上,就是把由用戶自由定制的word文檔,通過程序組裝成一個針對某一項目的操作流程。此過程相當于把數據,由打包存儲、大海撈針式查找,轉換成離散存儲、按需組合。同時,某個word文檔可能被多個工作流程引用,如果更新這個word文檔的內容,那么相關的工作流程都會被更新,從而實現更加方便地維護。
下面針對上述內容,詳細說明如何實現。
1 解決方案
1.1 VBA中Word對象基礎
1.1.1 新建Word引用
我們對Excel VBA都不陌生,但在Excel里操作Word可能接觸比較少,那么首先讓我們來了解一下Word對象的基礎知識。
首先需要創(chuàng)建一個對 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),可建立對文檔的引用,如果文件沒有打開,則還需要先用方法一或二來操作。