记录某次利用word邮件功能 由excel数据中批量生成奖状 遇到的问题及解决措施
學校的一次活動結束之后,部門下發了一個任務:由一個excel中的數據生成獎狀
excel中的數據為以上形式,根據排名分為一二三等獎,要給每組分發獎狀,獎狀為以下格式
獎狀中一共有三處不同的地方:
如果人工操作,除了需要一個文件一個文件編輯,還有一個很麻煩的地方,那就是團隊成員無法直接復制,表格中的數據帶有年級+學號,而獎狀中只需要姓名。
這種由數據批量編輯的做法很容易想到word的郵件功能,正好我之前用的不多,就拿來練練手。然后我馬上遇到了第一個問題
word郵件功能無法打開數據源
其實這個解決辦法很簡單,大部分的原因都是因為文件格式不對。郵件合并功能不支持excel的高級版本,也就是.xlsx對應的07版往上,將excel另存為.xls就解決了
如果還有問題,那基本上就是格式的問題了,郵件要求第一行的字段名稱對應下面的字段內容,格式錯了之后再修改成功是很難的,我建議把對你有用的數據單獨復制下來,粘貼到一個新建的xls文件中,這樣能就解決問題
打開數據源之后插入合并域,這里的操作很簡單,在你想要的位置插入對應的字段就好了
但在這之前還有之前提出的一個問題沒有解決,獎狀中要求只要人名,但數據是帶有年級和學號的,直接插入就會出現這種情況
雜亂的數據中提取姓名
考慮通過替換的方式修改excel中的數據,可以觀察到每個數據的格式是這樣的:“年級-學號-姓名”,這里說來話長,如果數據都是這個格式,改起來并不難,但是這些數據是不嚴格篩查格式的個人填表,我們在表中一次次篩查后發現了以下幾種情況:
單純用excel的替換肯定是解決不了這些問題的,用正則表達式比較理想。一番嘗試與修改過后,我們制定出了一套針對于這些數據的提取方案,其中excel替換和正則表達式結合使用(正則表達式使用該工具)
順序必須不能錯:
分別的作用為:
到這里就可以純凈提取出所有的名字了,插入合并域并點擊“查看合并數據”后就能得到如下效果,上下翻就能看到做的每一張
然后我們需要導出這每一張獎狀,點擊“合并到不同新文檔”,將這些文件放到一個新建的文件夾中
之后又出現了一個嚴重的問題
word郵件合并后,每個單獨的文件最后都會多出一頁
我并沒有找到一個簡單的處理方法批量刪除文檔最后一頁,WPS的批處理中沒有找到這個功能,所以嘗試用word中的宏來處理
由于宏也無法直接批量運行,所以需要一個vbs文件來操作宏批量運行,運行時office的Word配置比較完全,容易創建進程,所以在Word中錄制宏,之后再討論如何使用WPS
錄制宏需要先開啟“開發工具”這一欄,具體方法可以在網上找
Word中錄制宏沒法記錄鼠標操作,所以刪除第二頁必須只用鍵盤操作,幾番嘗試后我找到了一個比較好的方法:
所以點三下鍵盤即可刪除第二頁,之后點一下保存,再結束錄制
也可以直接代碼寫一個宏,要注意宏的名字要符合變量命名,數字不能開頭,盡量用英文,我這個起了個名叫“g4”
然后就是
如何批處理運行宏了
在需要操作的文件夾里新建一個.vbs文件
編輯并輸入以下內容,有兩處需要修改的地方
Option Explicit Const c_strRootFolder = "C:\Users\lyle\Desktop\a\b" `這里輸入文件夾路徑,外面要加"" On Error Resume Next Dim oApp, oDoc Dim fso, oFolder, oFile Set fso = CreateObject("Scripting.FileSystemObject") Set oFolder = fso.GetFolder(c_strRootFolder) Set oApp = CreateObject("Word.Application") oApp.Visible = TrueFor Each oFile In oFolder.FilesIf (UCase(Right(oFile.Path, 4)) = ".DOC") Or (UCase(Right(oFile.Path, 5)) = ".DOCX") ThenSet oDoc = oApp.Documents.Open(oFile.Path)oApp.Run "g4" `這里寫宏的名稱,外面要加""oDoc.Close TrueEnd If NextoApp.Quit False Set oFolder = Nothing Set fso = Nothing Set oApp = Nothing編輯完成之后點擊,就會看到一個文件一個文件的閃出,操作沒問題的話就成功了
總結
以上是生活随笔為你收集整理的记录某次利用word邮件功能 由excel数据中批量生成奖状 遇到的问题及解决措施的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NFL计划将数据跟踪芯片放入橄榄球中
- 下一篇: 在SQL Server 2000里设置和