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