如何利用excel和Word批量生成公文?

本人做人事工作,近期需要給幾百個員工出具公函,基本格式都一樣,就是裡面的員工編號、姓名、出生時間有變,這幾個要素我excel表都是全的,但一個個複製到Word模板里又慢又容易出錯,有沒有批量生成的方式?求助


來講講郵件合併的方法。郵件合併會生成單個文件,這樣列印的時候會比較方便。

首先我們也是先有這麼個數據表:

然後我們也要有模板:

注意:末尾不要有多餘的回車或者分頁符。郵件合併會自動給每一項創建一頁。

然後點擊郵件 - 開始郵件合併 - 信函

點擊旁邊的選擇收件人 - 使用現有列表 - 選擇你的 Excel 表格

這裡按照實際情況選

如果不是所有數據都要填進去的話旁邊有個按鈕「編輯收件人列表」那裡可以過濾一下。

然後我們把游標定位到要填寫姓名的地方

插入合併域 - 姓名(這裡顯示的是 Excel 表格列標題)

其他地方同理,全部完成後效果如圖

然後就好了。戳右邊的完成併合並

點擊編輯單個文檔然後選擇「全部」可以看到最終合併的文檔,或者你可以選幾頁來看。

點擊列印文檔就直接列印了。用這種方法如果要對每一頁創建新文檔的話請參考微軟官方教程:如何以編程方式將每頁或每節的文檔另存為一個單獨的文件

(完)


首先呢,先在一個文件夾下新建兩個空文檔,一個 Data.xlsx 文件,一個 Main.docx 文件。Data.xlsx 文件用來存儲人員信息的, Main.docx 文件就是你要生成公文的模板。

Data.xlsx 裡面就是人員姓名,編號,出生日期什麼的。不要在意日期和編號這些細節。

然後我們打開 Word 文檔,點擊 開發工具 —— 宏。

然後在彈出的對話框中,填上宏的名字,隨便填。然後點擊創建。

你就能看到系統給你添加了一個 Sub 的框架。

然後我們往裡面填代碼。

" 打開 Data.xlsx 文件
Dim MyFile As Object
Set MyFile = CreateObject("Scripting.FileSystemObject")

Dim FilePath As String
FilePath = ActiveDocument.Path "Data.xlsx"

" 如果不存在 Data.xlsx 文件
If Not MyFile.FileExists(FilePath) = True Then
" 退出
MsgBox "無法找到文件: Data.xlsx", Title:="Error"
Exit Sub
End If

" 讀取 Data.xlsx 文件
Dim ExcelObject As Object
Set ExcelObject = GetObject(FilePath)
Set Table = ExcelObject.Sheets(1).UsedRange()

" 循環
For i = 1 To Table.Rows.Count
" 清空變數
For Each Var In ActiveDocument.Variables
Var.Delete
Next

" 添加一個名字為 Name 的變數,它的值是 Data.xlsx 中第 i 行第 1 列的內容
ActiveDocument.Variables.Add Name:="Name", Value:=Table.Cells(i, 1).Text
" 添加一個名字為 Number 的變數,它的值是 Data.xlsx 中第 i 行第 2 列的內容
ActiveDocument.Variables.Add Name:="Number", Value:=Table.Cells(i, 2).Text
" 添加一個名字為 Date 的變數,它的值是 Data.xlsx 中第 i 行第 3 列的內容
ActiveDocument.Variables.Add Name:="Date", Value:=Table.Cells(i, 3).Text

" 更新 Word 文檔
ActiveDocument.Fields.Update

" 設置保存目錄
ChangeFileOpenDirectory ActiveDocument.Path

" 保存文件,文件名為:姓名.docx
ActiveDocument.SaveAs2 FileName:=Table.Cells(i, 1).Text ".docx", FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False, CompatibilityMode:=15
Next

如下圖所示。

保存並關閉代碼框。

然後就是寫模板了,用現成的就好。我隨便寫了一個公文,請不要在意公文的內容。如下圖所示。

公文中有姓名、編號、出生年月等信息。我們刪掉這些信息。

然後把游標放在要插入姓名的位置,然後按下 Ctrl + F9。

裡面輸入 DOCVARIABLE
Name,編號後面如法炮製,輸入 DOCVARIABLE Number,出生年月也一樣。圖中 Number 的大小寫有問題,但是不要緊,vba 不認大小寫。

此時按下 Alt + F9,文檔就變成這樣了:

然後公文就完成了。最後一步:

找到我們剛剛寫好的那個宏,點擊運行。

瞬間生成 9 份公文。

打開 Qiqi.docx,看一下內容。

已經全部填好了。以上!


WORD的郵件合併功能,具體請百度


像前面的答主使用VBA也是可以的,就是對新手不太友好。其實這種功能Word本身是有提供的,就是郵件合併功能。不過據我所知,只能把所有的公函合併到同一個Word文檔,真正要每個人存一份文檔的話還是只能用VBA。


如果是我,我會編程解決

先把模板弄出來,然後用Office的COM介面讀取文檔內容,替換相關的條目

如此循環

這對題主的要求太高了

題主可以學學vba

或者看一下Office2013的內容控制項,使用內容控制項在 Word 2013 的新增功能

不知道有沒有幫助


最後一段要修改,如下便可


寫那麼複雜的VBA, 請好好去重新學習WORD, 現在用WORD 自身的功能已經可以快速搞定。

這個鏈接的視頻教程中: 1小時玩轉職場WORD

第12課,就是說的這個操作的用法。總共3個操作步驟,不到5分鐘,你就能學會。

重點是,這個課程現在還是免費的! 學會了的,請點贊。


以上各位都只會說VBA 而不敢寫一個嗎?只有第一的答主和第二的答主算是答題,剩下的,呵呵呵


我有一個自己寫的小工具,.exe打開即可使用,需要的話 郵件 next_11@126.com


WPS郵件合併功能只支持自有格式.et,如果是.xls的文檔,會不支持。

WPS的郵件合併功能可以生成不同新文檔,再表格裡面加一列文檔名,可以根據文檔命名要求輸入文檔名稱。


Alt+F9 怎麼又是後會顯示空白?

顯示未提供文檔變數的地方,運行宏後也不顯示引用,還是顯示未提供文檔變數

而且運行後文件會出現,錯誤4198


不知道你用的word哪個版本,郵件合併可以,上網搜一下教程


office自帶的vba可以循環,批量生成


以前做過,批量從excel里取出數據生成word文件,用vba很容易實現。


推薦閱讀:

Windows 8 64位系統,使用什麼殺毒軟體比較好?
Windows 平台最好的軟體管家是什麼?
快速做出有界面的程序用什麼編程語言??
為什麼 Google 一直做開源軟體?
為什麼操作系統一次只能安裝一個程序?

TAG:軟體 | MicrosoftOffice | MicrosoftWord | MicrosoftExcel |