摘 要:数据报表的输出是VB.NET数据库应用程序的一个重要组成部分。本文介绍了VB.NET环境下对Word表格进行编程设计的基本原理,同时对应用中出现的问题进行了分析,并给出了相应的解决方案。
关键词:VB.NET ; 自动测试系统 ; 测试数据报表
1.引 言
随着以计算机为核心的自动测试设备在生产线上的应用,产品的生产效率和测试数据记录的精确性都得到较大的提高。因专用设备生成的测试数据报表的软件编程复杂,更改测试数据的输出格式会造成测试软件的颠覆性更改,工作量大、周期长。本文通过VB.NET平台下对Word表格编程进行研究,提出一种利用查找、替换的方法,以解决测试软件所生成的测试数据报表输出格式不易于修改的问题。
2.系统基本原理与实现方法
2.1 VB.NET简述
VB. net是Visual Basic. net的简称,是从 Visual Basic 语言演变而来,是一种为高效地生成类型安全和面向对象的应用程序而设计的语言。Visual Basic 允许开发人员开发面向 Windows、Web 和移动设备的程序。与所有面向Microsoft .NET Framework语言一样,使用 Visual Basic 编写的程序都具有安全性和语言互操作性方面优点。
2.2基本原理
首先使用Office软件制作测试数据报表的模板,并在模板中需要填写测试数据的地方填写占位符。其次通过测试软件的编程查找这些占位符,并将其替换为测试数据。最后将含有数据的测试数据报表文件进行保存或打印。
2.3实现方法
2.3.1制作模板
第一步,使用Office中的Word依据工艺规程制作一张空白的测试数据报表。第二步,在测试数据报表中需要填写测试数据的地方填写一个占位符。最后,将此文件作为测试数据报表的模板保存在特定的位置。
为保证查找时的准确性和维护时的方便性,测试数据报表中的占位符应为整个文件中唯一的字符串,建议使用特殊字符(!@#$)与普通字符(字母,数字)的结合(如!12),不建议使用全角字符。同时可以在填写占位符时设置其格式,在测试数据替换后该格式仍然保留。
2.3.2添加对Office的引用
在测试软件的解决方案中添加Office组件的引用,方法为选择“项目”菜单中的“添加引用”,
然后在“COM”中按表1选择需要添加COM组件。Word 2003版本选用“Microsoft Word 11.0 Object Library”COM组件,Word 2007版本选用“Microsoft Word 12.0 Object Library“COM组件。
2.3.3 操作Word模板
开发软件时对做好的Word测试数据报表模板编写处理程序,基本操作步骤如下:
1) 在代码页的顶部声明对命名空间“Microsoft.Office.Interop.Word”的引用,该步骤不是必需的;
2) 创建一个表示Word应用程序的Microsoft.Office.Interop.Word.Application对象;
3) 调用Documents集合的Open方法并提供文档的路径以打开做好的Word测试数据报表模板,并返回一个Microsoft.Office.Interop.Word.Document对象;
4) 使用Find对象遍历测试数据报表模板来搜索设置的占位符,并使用Replacement属性将占位符替换为测试数据,最后使用Find对象的Execute方法替换每个找到的项;
5) 使用完全限定的路径和文件名调用想要保存Microsoft.Office.Interop.Word.Document对象的SaveAs方法对填写了数据的测试数据报表进行保存(如果该文件夹中已存在同名称的文件,则会覆盖该文件而不显示任何提示);
6) 调用Microsoft.Office.Interop.Word.Document对象的Close方法关闭表示测试数据报表文档的Microsoft.Office.Interop.Word.Document对象;
7) 调用Microsoft.Office.Interop.Word.Application对象的Quit方法结束Word应用程序。
具体实现代码如下所示:
Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.
Interop.Word.Application();
object fileName = @" kesrc="mailto:!@#$2>!@#$)与普通字符(字母,数字)的结合(如!12),不建议使用全角字符。同时可以在填写占位符时设置其格式,在测试数据替换后该格式仍然保留。
2.3.2添加对Office的引用
在测试软件的解决方案中添加Office组件的引用,方法为选择“项目”菜单中的“添加引用”,
然后在“COM”中按表1选择需要添加COM组件。Word 2003版本选用“Microsoft Word 11.0 Object Library”COM组件,Word 2007版本选用“Microsoft Word 12.0 Object Library“COM组件。
2.3.3 操作Word模板
开发软件时对做好的Word测试数据报表模板编写处理程序,基本操作步骤如下:
1) 在代码页的顶部声明对命名空间“Microsoft.Office.Interop.Word”的引用,该步骤不是必需的;
2) 创建一个表示Word应用程序的Microsoft.Office.Interop.Word.Application对象;
3) 调用Documents集合的Open方法并提供文档的路径以打开做好的Word测试数据报表模板,并返回一个Microsoft.Office.Interop.Word.Document对象;
4) 使用Find对象遍历测试数据报表模板来搜索设置的占位符,并使用Replacement属性将占位符替换为测试数据,最后使用Find对象的Execute方法替换每个找到的项;
5) 使用完全限定的路径和文件名调用想要保存Microsoft.Office.Interop.Word.Document对象的SaveAs方法对填写了数据的测试数据报表进行保存(如果该文件夹中已存在同名称的文件,则会覆盖该文件而不显示任何提示);
6) 调用Microsoft.Office.Interop.Word.Document对象的Close方法关闭表示测试数据报表文档的Microsoft.Office.Interop.Word.Document对象;
7) 调用Microsoft.Office.Interop.Word.Application对象的Quit方法结束Word应用程序。
具体实现代码如下所示:
Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.
Interop.Word.Application();
object fileName = @"
Microsoft.Office.Interop.Word.Document doc = wordapp.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
……………
object replac
eAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
doc.Content.Find.ClearFormatting();
doc.Content.Find.Text = "占位符";
doc.Content.Find.Replacement.ClearFormatting();
doc.Content.Find.Replacement.Text = System.Convert.ToString(数据);
doc.Content.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref replaceAll, ref missing, ref missing, ref missing, ref missing);
……………
doc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
object wSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
doc.Close(ref wSaveChanges, ref missing, ref missing);
object wDoNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
wordapp.Quit(ref wDoNotSaveChanges, ref missing, ref missing);
2.3.4 显示测试数据报表
在填写完测试数据报表之后,关闭测试数据报表之前,将Application的Visible属性设置为true即可让填好的测试数据报表呈现出来。
2.3.5打印测试数据报表
对于Word模板在填写完测试数据报表(步骤4)之后,关闭测试数据报表文档(步骤6)之前,调用Microsoft.Office.Interop.Word.Document对象的PrintOut方法进行打印。
3.应用中出现的问题及解决方法
测试软件在调用Word的Find对象时出现错误或崩溃,错误代码为0x800706F7。原因为:Excel 5.0版将Word用于其接口标识符的服务器全局唯一标识符(GUID)用于现在已弃用的较旧对象模型。
当Excel 5.0类型库在系统上重新注册时,注册表中应指向Word类型库的接口GUID将指向Excel 5.0库,并且COM可能会错误地使用早期Word绑定为进程外客户端构建错误的代理表。由于此代理是为Excel的调度接口而不是为预期的Word接口配置的,因此对此代理进行的调用将返回错误或崩溃。
如果正确注册了Word类型库,则COM将正常构建正确的代理和进程外调用功能。
要解决此问题,可以执行下列操作之一:
1)修改您的代码,在上面列出的任何Word接口上调用方法或属性时都使用晚期绑定;
2)在发生该问题的系统上重新注册Word类型库。
建议使用晚期绑定解决方案。因为两种类型库均描述了实现IDispatch接口的接口,所以对任何IDispatch方法的调用都将有效,而与最后在系统上注册哪个类型库无关。这是确保代码不会在未管理的系统上遇到此错误的唯一方法。
对于所使用的客户端应用程序无法重新编译为使用晚期绑定的客户,在大多数情况下,可以通过重新注册Word类型库来解决该问题。
4.结论
本文对VB.NET自动测试系统的Word报表输出进行研究,得到一种快捷方便地生成测试数据报表的方法。该方法由于只对文件中的字符串进行操作,使得自动测试设备生成的测试数据报表可以方便的修改输出格式。
参考文献:
[1] 刘保顺.Visual Basic.NET 数据库开发专业教程[M].北京:清华大学出版社,2004.
[2]李海,龚学纲,李文亮.深入研究Visual Basic.NET[M].北京:电子工业出版社,2003.