摘要:VBA作為執(zhí)行通用的自動(dòng)化任務(wù)的編程語(yǔ)言之一,主要用來(lái)擴(kuò)展Windows的應(yīng)用程序功能?;趯?shí)際工作項(xiàng)目和需求,重點(diǎn)探索基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)的可行性實(shí)施方案,并以實(shí)踐案例輔以佐證。
關(guān)鍵詞:VBA;異構(gòu)數(shù)據(jù)源;PPT;自適應(yīng)讀寫
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào):16727800(2017)004015204
0引言
VBA(Visual Basic for Applications)是微軟開(kāi)發(fā)的在其桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化任務(wù)的編程語(yǔ)言,主要用來(lái)擴(kuò)展Windows的應(yīng)用程序功能。其中,PowerPoint作為Windows的應(yīng)用軟件之一,在教育培訓(xùn)、工作匯報(bào)等領(lǐng)域有著舉足輕重的地位,通常使用VBA對(duì)其進(jìn)行二次開(kāi)發(fā)[1]。本文主要根據(jù)筆者的實(shí)際工作項(xiàng)目需求,重點(diǎn)探索基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)的可行性實(shí)施方案。
1問(wèn)題提出 在信息化教學(xué)過(guò)程中,實(shí)用性微課、PPT等是主要的輔助教學(xué)資源。其中,PPT因?yàn)椤昂?jiǎn)單、實(shí)用、高效”的特點(diǎn),深得教師與學(xué)生喜愛(ài)。在實(shí)際課堂教學(xué)中,經(jīng)常需要實(shí)現(xiàn)師生互動(dòng),有時(shí)還需要實(shí)時(shí)分析學(xué)情,以便及時(shí)調(diào)整教學(xué)策略,提高課堂教學(xué)的有效性。如果可以在PPT中附加簡(jiǎn)易的測(cè)驗(yàn)功能,為學(xué)情分析提供可靠的數(shù)據(jù),將有助于實(shí)現(xiàn)解決問(wèn)題草根化、實(shí)現(xiàn)方法平民化,有利于推廣與分享。在PPT中實(shí)現(xiàn)簡(jiǎn)易的測(cè)驗(yàn)功能,離不開(kāi)數(shù)據(jù)讀寫。其中,如何實(shí)現(xiàn)異構(gòu)數(shù)據(jù)源的自適應(yīng)讀寫,是需要解決的技術(shù)問(wèn)題之一。2基于VBA的常用異構(gòu)數(shù)據(jù)源2.1XML XML是一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言,是保存數(shù)據(jù)的常用方法之一。它雖然不像Oracle、SQL Server等數(shù)據(jù)庫(kù)擁有強(qiáng)大的數(shù)據(jù)存儲(chǔ)和分析能力,但XML文件極其簡(jiǎn)單,易于被任何應(yīng)用程序讀寫。因此,XML文件是各種應(yīng)用程序之間進(jìn)行數(shù)據(jù)傳輸、交換最常用的格式。2.2XLS(或XLSX) XLS(或XLSX,下文以XLS為例),是一種常用的電子表格格式,可以使用Microsoft Excel打開(kāi),其廣泛地應(yīng)用于管理、統(tǒng)計(jì)等眾多領(lǐng)域,也常用于保存數(shù)據(jù)。目前,絕大多數(shù)應(yīng)用系統(tǒng)都支持XLS(或XLSX)文件的導(dǎo)入與導(dǎo)出,在辦公自動(dòng)化中發(fā)揮著重要作用。2.3TXT TXT是最常見(jiàn)的一種文件格式,在DOS時(shí)代的應(yīng)用就已很多,主要用于保存文本信息(含數(shù)據(jù))。它的優(yōu)勢(shì)是:體積小、存儲(chǔ)簡(jiǎn)單方便、不會(huì)中毒,是計(jì)算機(jī)和很多移動(dòng)設(shè)備的通用格式。因此,對(duì)于小數(shù)據(jù)量而言,選擇TXT進(jìn)行保存也是一種可行方案。3基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)3.1基本原理
3.1.1開(kāi)發(fā)環(huán)境 作為一種編程語(yǔ)言,VBA在Office軟件中的應(yīng)用非常成功,深得開(kāi)發(fā)者與使用者喜愛(ài)。在Office軟件中基于VBA進(jìn)行二次開(kāi)發(fā)是一種非常高效的開(kāi)發(fā)手段,例如:基于WORD開(kāi)發(fā)各類自動(dòng)生成的申報(bào)表,基于EXCEL開(kāi)發(fā)各類小型管理系統(tǒng),基于PPT開(kāi)發(fā)附加于課件的測(cè)驗(yàn)系統(tǒng)等[2]。下文以Microsoft Office PowerPoint為開(kāi)發(fā)環(huán)境,簡(jiǎn)述基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)的基本原理與實(shí)現(xiàn)方法。
3.1.2基本原理 對(duì)于常見(jiàn)的異構(gòu)數(shù)據(jù)源XML、XLS、TXT,基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)的基本原理如圖1所示。
其中,按異構(gòu)數(shù)據(jù)源(XML、XLS、TXT)被筆者課題研究過(guò)程中其它應(yīng)用程序讀寫的概率決定優(yōu)先級(jí)。
3.1.3自適應(yīng)選擇數(shù)據(jù)源 在VBA中,主要利用Dir()函數(shù)進(jìn)行判斷,然后依據(jù)優(yōu)先級(jí)實(shí)現(xiàn)自適應(yīng)讀寫,其基本原理如圖2所示。
通用性示例代碼如下:
myselect = 0 If Dir("mytk.xml", vbNormal) <> "" Then myselect = 1 Else If Dir("mytk.xls", vbNormal) <> "" Then myselect = 2 Else If Dir("mytk.txt", vbNormal) <> "" Then myselect = 3 End If End If End If 說(shuō)明:變量myselect的值決定系統(tǒng)讀入的是哪一種數(shù)據(jù)源,0表示沒(méi)有合適的數(shù)據(jù)源,1表示XML,2表示XLS,3表示TXT。3.2基于VBA的讀入技術(shù)
3.2.1XML文件讀入 在VBA中,主要利用MSXML.DOMDocument對(duì)象讀入XML文件,其基本原理如圖3所示。
通用性示例代碼如下:
Set objDOM = CreateObject("MSXML.DOMDocument") objDOM.Load ("mytk.xml") objDOM.async = False Set ns1= objDOM.SelectNodes("http://tm") For i = 1 To ns.Length mytm(i) = ns1.Item(i - 1).ChildNodes(0).Text Next Set objDOM = Nothing
3.2.2XLS文件讀入 在VBA中,主要利用Excel.Application對(duì)象讀入XLS文件[4],其基本原理如圖4所示。
通用性示例代碼如下:
Set xlApp = New Excel.Application xlFilePath$ = "mytk.xls" xlApp.Workbooks.Open xlFilePath, , False mylen = 0 i = 2 While (xlApp.Workbooks(1).Sheets(1).Cells(i, 1) <> "END") mylen = mylen + 1 mytm(mylen) = xlApp.Workbooks(1).Sheets(1).Cells(i, 2) i = i + 1 Wend xlApp.Workbooks.Close Set xlApp = Nothing
3.2.3TXT文件讀入 在VBA中,主要利用Open函數(shù)讀入TXT文件,其基本原理如圖5所示。
通用性示例代碼如下:
myfile = "mytk.txt" Open myfile For Input As #1 mylen = 0 Do While Not EOF(1) mylen = mylen + 1 Line Input #1, mytm(mylen) Loop Close #13.3基于VBA的寫入技術(shù)
3.3.1XML文件寫入 在VBA中,寫入XML文件,與讀操作一樣主要利用MSXML.DOMDocument對(duì)象進(jìn)行,其基本原理如圖6所示。
通用性示例代碼如下:
Dim objDOM As Object Set objDOM = CreateObject("MSXML.DOMDocument") objDOM.Load ("cj.xml") objDOM.async = False Set CloneNode = objDOM.getElementsByTagName("myinfo")(0) Set NewNode = CloneNode.CloneNode(True) NewNode.ChildNodes(0).Text = Trim(Me.TextBox1.Text) NewNode.ChildNodes(1).Text = Trim(Str(mycj)) objDOM.documentElement.appendChild (NewNode) objDOM.Save "cj.xml" Set objDOM = Nothing
3.3.2XLS文件寫入 在VBA中,寫入XLS文件,與讀操作一樣主要利用Excel.Application對(duì)象進(jìn)行,其基本原理如圖7所示。
通用性示例代碼如下:
Set xlApp = New Excel.Application xlFilePath$ = "cj.xls" xlApp.Workbooks.Open xlFilePath, , False mylen = 0 i = 2 While (Trim(xlApp.Workbooks(1).Sheets(1).Cells(i, 1)) <> "") i = i + 1 Wend xlApp.Workbooks(1).Sheets(1).Cells(i, 1) = Trim(Me.TextBox1.Text) xlApp.Workbooks(1).Sheets(1).Cells(i, 2) = Trim(Str(mycj)) xlApp.Workbooks.Application.DisplayAlerts = False xlApp.Workbooks.Application.ActiveWorkbook.Save xlApp.Workbooks.Close Set xlApp = Nothing
3.3.3TXT文件寫入 在VBA中,寫入TXT文件,與讀操作一樣主要利用Open函數(shù)進(jìn)行,其基本原理如圖8所示。
通用性示例代碼如下:
myfile = "cj.txt" Open myfile For Append As #1 Print #1, "姓名:" & Trim(Me.TextBox1.Text) & " | 成績(jī):" & Trim(Str(mycj)) Close #14案例 在筆者負(fù)責(zé)的課題研究與實(shí)踐中,常需要在PPT中附加實(shí)現(xiàn)簡(jiǎn)易的測(cè)驗(yàn)功能(即:隨堂測(cè)驗(yàn)系統(tǒng)),為學(xué)情分析系統(tǒng)提供有效數(shù)據(jù)。下文以隨堂測(cè)驗(yàn)系統(tǒng)為例,簡(jiǎn)述基于VBA的異構(gòu)數(shù)據(jù)源自適應(yīng)讀寫技術(shù)的具體應(yīng)用。4.1基本原理
4.1.1基本原理 根據(jù)上文所述的自適應(yīng)讀寫技術(shù),本案例隨堂測(cè)驗(yàn)系統(tǒng)的基本原理如圖9所示。
4.1.2異構(gòu)數(shù)據(jù)源存儲(chǔ)位置題庫(kù):當(dāng)前文件夾下的子文件夾tk。例如:tk\\mytk.xml。學(xué)生成績(jī):局域網(wǎng)共享文件夾cj。例如:\\192.168.1.99\\cj\\cj.xml,IP地址可變,單獨(dú)保存于myip.txt中(使用者可根據(jù)需要修改IP地址)。
4.1.3異構(gòu)數(shù)據(jù)源存儲(chǔ)格式以XML文件格式為例,異構(gòu)數(shù)據(jù)源(題庫(kù))的存儲(chǔ)格式如圖10所示。
以XML文件格式為例,異構(gòu)數(shù)據(jù)源(學(xué)生成績(jī))的存儲(chǔ)格式如圖11所示。
4.1.4異構(gòu)數(shù)據(jù)源讀寫優(yōu)先級(jí) XML、XLS、TXT,三者選其一。即:如果存在XML格式的題庫(kù)或成績(jī)庫(kù),則優(yōu)先選擇XML文件,否則檢測(cè)是否存在XLS格式的題庫(kù)或成績(jī)庫(kù),TXT格式文件的優(yōu)先級(jí)別為最低。
4.1.5數(shù)據(jù)加解密技術(shù) 為了方便理解,上述題庫(kù)示例中的參考答案并沒(méi)有實(shí)現(xiàn)加密。實(shí)際應(yīng)用時(shí),答案進(jìn)行了簡(jiǎn)單加密,簡(jiǎn)單加解密基本原理如下:加密:加密答案= Chr((Asc(UCase(參考答案)) - 30 + Len(題目)))解密:參考答案= Chr((Asc(UCase(加密答案)) + 30 - Len(題目)))4.2實(shí)現(xiàn)
4.2.1核心實(shí)現(xiàn)技術(shù)(1)自適應(yīng)讀入異構(gòu)數(shù)據(jù)源。
If Dir(Application.ActivePresentation.Path & "\\tk\\mytk.xml", vbNormal) <> "" Then '讀入文件mytk.xml的數(shù)據(jù),實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
Else If Dir(Application.ActivePresentation.Path & "\\tk\\mytk.xls", vbNormal) <> "" Then '讀入文件mytk.xls的數(shù)據(jù),實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
Else If Dir(Application.ActivePresentation.Path & "\\tk\\mytk.txt", vbNormal) <> "" Then '讀入文件mytk.txt的數(shù)據(jù),實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
End If End IfEnd If(2)自適應(yīng)寫入異構(gòu)數(shù)據(jù)源。
myfile = Application.ActivePresentation.Path & "\\myip\\myip.txt"Open myfile For Input As #1Line Input #1, myipClose #1'讀入局域網(wǎng)IP地址(自適應(yīng),IP地址可修改)
If Dir("\\" + Trim(myip) + "\\cj\\cj.xml", vbNormal) <> "" Then '將數(shù)據(jù)寫入文件mytk.xml,實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
Else If Dir("\\" + Trim(myip) + "\\cj\\cj.xls", vbNormal) <> "" Then '將數(shù)據(jù)寫入文件mytk.xls,實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
Else If Dir("\\" + Trim(myip) + "\\cj\\cj.txt", vbNormal) <> "" Then '將數(shù)據(jù)寫入文件mytk.txt,實(shí)現(xiàn)代碼與上文通用性示例代碼類似(略)
End If End IfEnd If
4.2.2應(yīng)用 (1)復(fù)制隨堂測(cè)驗(yàn)PPT幻燈片到自己的PPT中。 (2)復(fù)制3個(gè)文件夾mytk(題庫(kù)樣式)、cj(成績(jī)樣式)、myip(IP地址)到自己的PPT文件夾。 (3)按要求格式設(shè)計(jì)試題或從其它系統(tǒng)中導(dǎo)出符合格式要求的試題等(只選擇3種格式中的一種即可,默認(rèn)為XML文件,答案加密時(shí)使用附加小程序)。 (4)選擇測(cè)驗(yàn)成績(jī)的保存格式(只選擇3種格式中的一種,默認(rèn)為XML文件)。 (5)根據(jù)測(cè)驗(yàn)成績(jī)自動(dòng)生成學(xué)情分析報(bào)告(限于篇幅,本文略)。5結(jié)語(yǔ) VBA作為執(zhí)行通用的自動(dòng)化任務(wù)的編程語(yǔ)言之一,常用于開(kāi)發(fā)基于Office的小型管理系統(tǒng),以及基于PPT的各種附加程序??紤]到推廣應(yīng)用時(shí)的兼容性,文中提及的代碼全部在Office 2003及以上版本中測(cè)試通過(guò),并應(yīng)用于實(shí)際工作中。本文的推廣應(yīng)用案例有:廣東省中等職業(yè)學(xué)?!鞍偾f(wàn)人才培養(yǎng)工程”專業(yè)名師培養(yǎng)對(duì)象李進(jìn)豪工作室、《基于AES的高水平教學(xué)團(tuán)隊(duì)構(gòu)建的研究與實(shí)踐》課題組、廣東省海洋工程職業(yè)技術(shù)學(xué)校等。
參考文獻(xiàn):
[1顏清,彭小平. VBA拓展PowerPoint應(yīng)用程序的開(kāi)發(fā)功能[J].計(jì)算機(jī)科學(xué),2004(B07):124126.
[2]高軼俊.在PowerPoint課件中如何用VBA技術(shù)制作交互型測(cè)試題[J].中國(guó)教育技術(shù)裝備,2010(36):110112.
[3]朱儉,馬敬賢,宋玉,等. VBA在Excel中的應(yīng)用[J]. 軟件導(dǎo)刊, 2015,14(4):4648.
[4]唐燕,韓愛(ài)慶,翟興. 基于 VBA 技術(shù)實(shí)現(xiàn)調(diào)查問(wèn)卷數(shù)據(jù)自動(dòng)讀取[J]. 計(jì)算機(jī)與現(xiàn)代化,2014(2):226228.
(責(zé)任編輯:黃?。?