


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