基于VBA的异构数据源自适应读写技术研究与实践

2017-06-20 21:34李进豪
软件导刊 2017年4期

摘要:VBA作為执行通用的自动化任务的编程语言之一,主要用来扩展Windows的应用程序功能。基于实际工作项目和需求,重点探索基于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("//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及以上版本中测试通过,并应用于实际工作中。本文的推广应用案例有:广东省中等职业学校“百千万人才培养工程”专业名师培养对象李进豪工作室、《基于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.

(责任编辑:黄健)