【關(guān)鍵詞】辦公自動化;教學(xué)管理;VBA 宏語言
智慧校園建設(shè)為教育教學(xué)的日常管理注入了新的動能,智慧校園教學(xué)服務(wù)管理平臺(簡稱教務(wù)平臺)提供了多項(xiàng)教務(wù)管理功能(如教學(xué)計(jì)劃及任務(wù)安排、課表編排、調(diào)課處理、成績管理、學(xué)籍管理等),這使得教務(wù)員大大提高了辦公效率,各項(xiàng)資源的利用率也大大提高。但教務(wù)平臺依托網(wǎng)絡(luò),須在聯(lián)網(wǎng)的前提下,登錄系統(tǒng)后方可查詢信息,而在實(shí)際工作中,為了及時(shí)響應(yīng)工作需求,也為了有助于調(diào)課安排,往往需要匯總?cè)航處煹恼n表信息,制作一張電子總表,教務(wù)員雖然可以從教學(xué)平臺中導(dǎo)出教師的課表信息,但導(dǎo)出的課表體積大、一頁上僅顯示一位教師的課表安排情況,不管是打印還是查看都不太方便,因此,教務(wù)員需要自行制作符合實(shí)際工作要求的總課表。
如果教務(wù)員采用手工錄入的方法制作總課表,不僅效率低,而且會存在錯誤,如果能根據(jù)教務(wù)系統(tǒng)中的排課情況,一鍵生成教師總課表,會極大地提高教務(wù)員的辦公效率。
教務(wù)平臺是高校在智慧校園建設(shè)環(huán)境下購買使用的一個通用型應(yīng)用軟件,其功能可以滿足大部分教學(xué)管理所需,但教務(wù)平臺不具備一鍵生成符合實(shí)際需求的、有特定格式的全院教師總課表的功能,如果通過軟件定制功能來滿足要求,需要投入的資金巨大。本方案采用Office軟件自帶的VBA宏語言功能,通過編寫一些簡單的代碼,即可實(shí)現(xiàn)一鍵生成教師總課表,避免了手工錄入產(chǎn)生的錯誤,極大地提高了辦公效率。
(一) Excel VBA的介紹
Microsoft Excel是廣大辦公用戶所熟知的Microsoft Office軟件中的電子表格軟件,在計(jì)算機(jī)專業(yè)人員眼中,它也是一種操作簡便的數(shù)據(jù)庫管理工具。VBA是Visual Basic forApplications的縮寫,是微軟公司開發(fā)的宏語言,它被內(nèi)置于Microsoft Office軟件中。依靠VBA,Excel可以成為數(shù)據(jù)庫管理工具;有了VBA,可以基于Excel應(yīng)用程序進(jìn)行二次開發(fā);通過VBA,可以設(shè)計(jì)出與Windows窗口風(fēng)格一致的交互式界面,便捷地實(shí)現(xiàn)對Excel表格的數(shù)據(jù)管理。這種基于ExcelVBA管理信息系統(tǒng)得到較為廣泛的應(yīng)用[1]。
(二)選擇EXCEL VBA宏語言的原因
VBA是一種簡單且功能強(qiáng)大的編程語言,可用于擴(kuò)展Office應(yīng)用程序,VBA 腳本可用于加速執(zhí)行日常任務(wù),為Office應(yīng)用程序添加新功能,使用 Excel VBA可代替大部分格式設(shè)置、編輯或者函數(shù)調(diào)用[2]。
用于功能開發(fā)的計(jì)算機(jī)語言種類繁多,VBA不是最常使用的,甚至有人認(rèn)為VBA已經(jīng)過時(shí)了,但從實(shí)際應(yīng)用來看,VBA并未完全過時(shí),目前最新的 MS Office 2021 、365 版本都還支持 VBA,因此只要微軟 Office 新版本繼續(xù)支持,VBA就不會過時(shí)、不會消失。相比Java、C#、python來看,VBA是office原生支持的,不需要部署環(huán)境,也無須安裝數(shù)據(jù)庫軟件,在使用時(shí),如果用其他開發(fā)語言,需要先部署環(huán)境,建立數(shù)據(jù)庫,編寫代碼,設(shè)計(jì)人機(jī)交互界面(制作網(wǎng)頁等),步驟十分繁瑣,而excel就是一個整體,工作表可以作為“數(shù)據(jù)庫表”,工作表也可作為“交互界面”,相比較而言,VBA更適合用于辦公過程中實(shí)現(xiàn)某個既定流程的自動化處理,可提高辦公效率,且移植性高。因此在本方案中,選擇用Excel VBA宏語言編程實(shí)現(xiàn)教師總課表的一鍵生成。[3]
為了更快捷地生成教師總課表,也曾使用MySQL數(shù)據(jù)庫+PHP環(huán)境的方式制作教師總課表,但這個方法存在一些局限性,有以下不便之處:
(1)需要搭建環(huán)境
搭建環(huán)境,首先是下載安裝Apache HTTP服務(wù)器軟件,其次是PHP及MySQL軟件包,這些軟件都是免費(fèi)的,可在官網(wǎng)上下載,同時(shí),為了保證軟件能夠正常使用,還需配置PHP運(yùn)行的環(huán)境參數(shù),過程較為復(fù)雜;
(2)需要維護(hù)數(shù)據(jù)庫
使用MySQL數(shù)據(jù)庫軟件管理數(shù)據(jù)時(shí),首先要設(shè)計(jì)數(shù)據(jù)庫的模型、建立數(shù)據(jù)表的結(jié)構(gòu)、錄入數(shù)據(jù),而為了生成教師總課表,在數(shù)據(jù)庫中至少需要建立3個工作表:教研室表、教師信息表、教師課務(wù)表,在每次生成新課表前,還需要對數(shù)據(jù)表進(jìn)行更新維護(hù),增加了工作量和復(fù)雜性;
(3)需要調(diào)整格式
PHP是一種在服務(wù)器端執(zhí)行的腳本語言,通過編寫代碼首先在網(wǎng)頁上生成教師總課表,再下載到本地計(jì)算機(jī),保存下載的文件格式為Excel文件,這種方法得到的電子表的行列格式還存在著很大的問題,每次生成新課表后都需要花費(fèi)一定的時(shí)間反復(fù)地調(diào)整格式,給工作帶來了不便。
因此,相比較而言,直接使用Excel的VBA宏語言更加簡便快捷。Excel軟件在電腦中使用非常普遍,不管是微軟還是WPS,其Excel都支持VBA,也無需再另外安裝其他軟件,不需要配置環(huán)境參數(shù),直接在Excel中編寫簡單的代碼就能實(shí)現(xiàn)目標(biāo)功能。
(三)實(shí)現(xiàn)過程
1.數(shù)據(jù)準(zhǔn)備
智慧校園教學(xué)管理服務(wù)平臺提供了課表編排的功能,每學(xué)期課表編排結(jié)束后,從教務(wù)平臺中導(dǎo)出全院教師課表數(shù)據(jù)文件,這份原始文件中的數(shù)據(jù)格式與實(shí)際所需的格式往往不同,因此要根據(jù)原始數(shù)據(jù)內(nèi)容來制作符合實(shí)際需要的總課表。
首先準(zhǔn)備好一個Excel文件,在Excel文件中包含2個工作表,工作表1用于生成總表,可將其命名為教師總表,教師總表內(nèi)先預(yù)填一系列空白課表,每張空白課表的行標(biāo)題為節(jié)次,列標(biāo)題為星期,每橫向放置4位教師的課表,課表按教研室名稱分類,預(yù)先將全院教師名字按照其所在教研室分類后填入空白課表中;工作表2用作數(shù)據(jù)源,命名為數(shù)據(jù)庫表,每學(xué)期課表編排完成后,教務(wù)員從教務(wù)平臺中導(dǎo)出全院教師課表原始數(shù)據(jù),將原始數(shù)據(jù)用作數(shù)據(jù)源時(shí),需對內(nèi)容和結(jié)構(gòu)進(jìn)行調(diào)整,原始數(shù)據(jù)中可能會存在合并的單元格,要取消合并的單元格,刪除不符合要求的標(biāo)題,整理數(shù)據(jù),確保每個教師在數(shù)據(jù)表中僅有一條課務(wù)數(shù)據(jù)記錄。為了后續(xù)生成課表時(shí)數(shù)據(jù)能自動對應(yīng)填入,數(shù)據(jù)表中每位教師的課務(wù)數(shù)據(jù)記錄采用一1、一2、一3、一4作為列標(biāo)題,分別代表星期一第1-2節(jié)、3-4節(jié)、5-6節(jié)、7-8節(jié)課,后續(xù)列標(biāo)題依此類推記錄每位教師每天的課務(wù)情況。
2.分析及實(shí)現(xiàn)
(1)生成課表
在Office軟件中,VBA提供了大量訪問對象(如頁面設(shè)置 PageSetup、表格設(shè)置 Tables、段落設(shè)置 Paragraph、字體設(shè)置Font等),由于它具有強(qiáng)大的對象控制能力、功能的擴(kuò)展及定制能力,突破了Office的自身極限,因此可以完成MS Office本身無法完成的功能[4]。通過對這些對象的屬性設(shè)置、方法使用和事件驅(qū)動,實(shí)現(xiàn)對office的再次開發(fā),從而實(shí)現(xiàn)一鍵生成總課表的功能。Excel在設(shè)計(jì)模式下提供了豐富的表單控件用于交互界面的制作,要使用表單控件首先要啟用Excel的開發(fā)工具,需要進(jìn)入Excel文件菜單→選項(xiàng)→自定義功能區(qū),將開發(fā)工具添加到主選項(xiàng)卡中。添加成功后,在窗口上方選項(xiàng)卡上點(diǎn)擊“開發(fā)工具”欄,在“插入”按鈕下即可找到表單控件,本方案使用了表單控件中的按鈕控件,在工作表界面的空白處插入兩個按鈕,一個用于一鍵生成總課表內(nèi)容,一個用于一鍵清除總課表課務(wù)信息內(nèi)容,通過按鈕控件的屬性對話框,可以輕松地修改按鈕文字、大小、顏色等樣式。
VBA作為一種面向?qū)ο蟮木幊谭椒?,它將代碼組織為不同的對象、類、模塊等不同的層次,這樣可以更加靈活地處理數(shù)據(jù)邏輯、提高代碼的可讀性和維護(hù)性[ 5 ]。在工作表中插入兩個窗體按鈕控件后,將其中一個按鈕(CommandButton1)的caption屬性設(shè)置為“生成”,進(jìn)入代碼編輯界面,選擇代碼編輯對象為“CommandButton1”,事件為“click”。需要實(shí)現(xiàn)的功能為:當(dāng)點(diǎn)擊該按鈕時(shí),由Excel自動將工作表2:數(shù)據(jù)庫表中的數(shù)據(jù)內(nèi)容按教師名稱填入工作表1:教師總表的對應(yīng)單元格內(nèi),生成一張適合打印、便于查看的總課表。
實(shí)現(xiàn)自動生成總課表的核心算法即為“兩個表的循環(huán)判斷”,如何實(shí)現(xiàn)這一過程呢?為了生成教師總課表,需要在工作表2:數(shù)據(jù)庫表中逐個取出每條數(shù)據(jù)記錄,將該條數(shù)據(jù)記錄中的教師姓名與工作表1:教師總表中的教師姓名進(jìn)行比較,如果相同則將該條數(shù)據(jù)記錄中的課務(wù)信息填入工作表1中該教師課表的相應(yīng)單元格內(nèi)。
教師總表中每橫向顯示4位教師的課務(wù)信息,因此這四位教師姓名分別位于A、I、Q、Y列,在自動匹配過程中,程序自動從工作表2:數(shù)據(jù)庫表中取出一位教師的數(shù)據(jù)記錄(即一行數(shù)據(jù)),將教師姓名與工作表1:教師總表中的第A、I、Q、Y列單元格內(nèi)教師姓名逐個比對,如果相同,則在工作表1該教師的課表內(nèi)按序?qū)⒄n務(wù)填入,填入的規(guī)則是——工作表2:數(shù)據(jù)庫表中某教師數(shù)據(jù)行中列標(biāo)題為“一1”的單元格數(shù)據(jù)內(nèi)容填入工作表1:教師總表對應(yīng)教師“周一”節(jié)次為“[1-2]”后的一個單元格內(nèi),其他依此類推,最后將該教師課務(wù)信息完整地填入課表中。
實(shí)現(xiàn)此過程的主要關(guān)鍵技術(shù)為:
①Excel表的實(shí)例化:通過set關(guān)鍵字創(chuàng)建數(shù)據(jù)表的實(shí)例化對象,如:Set b1 = Sheets(\"教師課表\"),后續(xù)可通過實(shí)例化對象名b1訪問Excel文件中的“教師課表”工作表。
②獲取數(shù)據(jù)表中的記錄總數(shù):VBA的Range對象提供了CurrentRegion屬性,這個屬性返回一個Range對象,該對象表示當(dāng)前區(qū)域,常常用來獲取動態(tài)的單元格區(qū)域。CurrentRegion.Rows.Count可用于返回區(qū)域中行的個數(shù),是一種常用的行計(jì)數(shù)方法。
③循環(huán)判斷:為了匹配數(shù)據(jù),需采用循環(huán)嵌套,外層循環(huán)逐條獲取工作表2:數(shù)據(jù)表中每一條課務(wù)數(shù)據(jù)記錄,取出后在內(nèi)層循環(huán)遍歷工作表1:教師課表中每個教師姓名,如相同,通過Range對象獲取單元格內(nèi)數(shù)據(jù)填入教師課表中。
(2)清除教師總表中的課程內(nèi)容
每當(dāng)新學(xué)期來臨,教師總課表需要清除原數(shù)據(jù),生成新數(shù)據(jù),因此清除功能也是必不可少的,清除數(shù)據(jù)時(shí),僅需刪除課務(wù)信息,但要保留數(shù)據(jù)表的行列格式,在核對更新各教研室的教師名單后,點(diǎn)擊生成按鈕,即可得到新學(xué)期的教師總課表。
實(shí)現(xiàn)清除數(shù)據(jù)功能同樣采用表單控件中的按鈕控件,將之前插入的按鈕(CommandButton2)的caption屬性設(shè)置為“清除”,進(jìn)入代碼編輯界面,選擇代碼編輯對象為“CommandButton2”,事件選擇為“click”。需要實(shí)現(xiàn)的功能為:僅刪除當(dāng)前工作表中的課務(wù)信息。由于教師總表中每橫向顯示4位教師的課表,清除時(shí)僅去除掉課務(wù)信息,保留其他部分,每位教師的課表占5列,4位教師的課表數(shù)據(jù)分別位于C-G列、K-O列、S-W列、AA-AE列,點(diǎn)擊清除按鈕,即要清除這些列中的課務(wù)信息內(nèi)容。
實(shí)現(xiàn)此過程的主要關(guān)鍵技術(shù)為:
①清除信息:通過設(shè)置課表中單元格數(shù)據(jù)為空值來達(dá)到清除的目的,例如:b1.Range(\"C 4\") = \"\",即清除C4單元格中的內(nèi)容。
②保留需要的數(shù)據(jù):在清除數(shù)據(jù)時(shí)要保留部分?jǐn)?shù)據(jù),如教研室名稱、教師姓名、課表中的星期和節(jié)次,需要清除的僅是教師課表中每天的課務(wù)數(shù)據(jù),因此遍歷+判斷的方法來判定實(shí)現(xiàn)哪些數(shù)據(jù)需要清除。Range(\"A1\").CurrentRegion.Rows.Count可獲取教師總表中的記錄數(shù),在遍歷過程中,如果某單元格的內(nèi)容為節(jié)次標(biāo)題(如:[1-2]),即清除該單元格之后橫向5個單元格中的數(shù)據(jù)(即每天該節(jié)次的數(shù)據(jù))。
該方案在150人規(guī)模背景下已使用數(shù)個學(xué)期,每學(xué)期課表編排完成后,從智慧校園教務(wù)平臺中導(dǎo)出原始課表數(shù)據(jù),用該方案生成全院教師電子總課表花費(fèi)時(shí)間在5秒以內(nèi),此方案快速有效、準(zhǔn)確性高,也無須重新調(diào)整電子表格式,極大地提高了辦公效率。實(shí)踐證明方案是成功的,當(dāng)然在代碼設(shè)計(jì)時(shí)還有一些不足之處,會在今后的使用過程中進(jìn)一步完善和維護(hù)。
智慧校園教學(xué)服務(wù)管理平臺在日常教學(xué)管理中發(fā)揮著重要的作用,但無法滿足教務(wù)員所有的實(shí)際工作需求,教務(wù)平臺功能的升級完善需要一定的時(shí)間周期,也需要投入不菲的資金數(shù)額,而且也不是所有的需求都能實(shí)現(xiàn)升級補(bǔ)充,Excel的VBA功能設(shè)計(jì)實(shí)現(xiàn)自動生成教師總表,既能滿足個性化需求,又提高了辦公效率,具有一定的應(yīng)用價(jià)值。
用本方案自動生成教師總課表,其實(shí)就是一個啟用了宏的Excel文件,因此操作簡便,節(jié)省資源,易于維護(hù)。實(shí)踐表明,Excel及VBA,在實(shí)現(xiàn)辦公流程的自動化處理方面具有優(yōu)勢,可開發(fā)出易維護(hù)、易操作、省資源的系統(tǒng),是實(shí)現(xiàn)辦公自動化,提高工作效率的便捷手段。
參考文獻(xiàn):
[1] 劉柱鴻, 黎鑫, 彭元輝. 基于Excel VBA 的教學(xué)秩序督查報(bào)表管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件工程,2018,21(4):45-48.
[2] 楊明, 傅天翔. 基于VBA 的汽車零部件物流包裝方案信息管理應(yīng)用[J]. 電腦編程技巧與維護(hù),2022(12):94-96.
[3] 周德林. 運(yùn)用VBA 自動生成子課程表[J]. 電子測試,2018(21):135-136.
[4] 馬寧, 鄧先瑞, 杜瑞慶. 基于VBA 和EXCEL 的學(xué)生成績排序[J]. 中國科技信息,2007(1):231-232.
[5] 王超. 基于VBA 技術(shù)的一鍵公文自動排版的實(shí)現(xiàn)[J]. 淮海工學(xué)院學(xué)報(bào)(自然科學(xué)版),2015,24(3):42-46.