首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

7.6  创建一个Excel工作簿用来存储测试场景的运行结果

问题

如何创建一个Excel工作簿用于存储测试场景的运行结果。

设计

创建一个OleDbConnection对象(这个类位于System.Data.OleDb命名空间里),用这个对象连接你想要进行数据存储的目标机器。然后使用一个OleDbConnection对象,并赋给它合适的CommandText属性,接下来通过这个对象的ExecuteNonQuery()方法完成期望的操作。

方案

Console.WriteLine("\nCreating Excel database");

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +

                                       "Data Source=C:\\Results\\results.xls;" +

                                       "Extended Properties=\"Excel 8.0;HDR=YES\"";

OleDbConnection conn = new OleDbConnection();

conn.ConnectionString = connStr;

conn.Open();

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = conn;

cmd.CommandText = "CREATE TABLE tblResults (ScenarioID char(5),

                                         Result char(4), WhenRun char(19))";

cmd.ExecuteNonQuery();

conn.Close();

这个例子程序创建一个results.xls的Excel文件,这个文件只有一个工作表(worksheet),名为tblResults。这个工作表有3个列,它们的标题(header)依次是ScenarioID(位于单元格A1),Result(位于单元格B1),以及WhenRun(位于单元格C1)。

注解

有时候你可能不想把测试场景的运行结果保存到文本文件、SQL数据库或其他更为常用的数据文件中,而是保存到一个Excel工作簿里。如果你想这么做,必须创建一个Excel工作簿,并且这个工作簿可以通过编程的方式接受数据。通过程序实现.NET与Excel之间的互操作,最简单的方法就是使用OLE DB技术。首先,我们需要创建一个连接字符串。这时候要特别当心连接字符串的语法。请注意,在DataSource这个attribute里,我们用两个反斜杠(\\)来表示一个反斜杠(\),而在Extended Properties这个attribute里,我们使用反斜杠加引号(\")表示在连接字符串里嵌入一个双引号。连接字符串里的HDR=YES,意思是在Excel工作簿的第一行创建一个header。“Excel 8.0”并不是直接指代测试机器上的Excel电子表格程序的版本号;它指代的是已安装的Jet数据库ISAM(Indexed Sequential Access Methods)格式的版本号。可以通过查看HKEY_LOCAL_MACHINE\ Software\Microsoft\Jet\4.0\ISAM Formats 的注册表设置来验证测试机器上的版本号。

创建好一个合适的连接字符串之后,接下来应该创建一个OleDbConnection对象,它会在连接字符串所指定的工作簿里创建一个工作表。这个Excel文件的创建是隐式的——并不需要使用Create()或与之类似的方法来创建这个文件。请注意,赋给每个列的都是OLE DB数据类型。在本例中,一个测试场景ID(例如,“12345”)由5个字符组成,测试场景结果由4个字符组成(“pass”或“fail”),测试场景的运行事件信息(例如,“2006-10-27T13:42:25”)由19个字符组成。你也可以指定其他的OLE DB数据类型,比如int、date等等,但是通常来说,把所有的数据列的类型都设为char,会更好一些。这里有三种不同的数据模型——C#数据类型、OLE DB数据类型,以及Excel数据类型。经验显示,当插入测试场景运行结果的时候,只使用char数据类型可以避免很多类型转换问题。如果你想直接在表示结果的Excel工作簿里实施数值分析操作,那也可以考虑直接存储int等类型。例如:

cmd.CommandText = "CREATE TABLE tblResults (ScenarioID int,

                  Result char(4), WhenRun date)";

上述代码会把表示测试场景ID的列创建为整数类型,把表示结果的列创建为text类型,并且把表示运行时间的列创建为date类型(去掉WhenRun变量的时间部分)。

上述方案假定results.xls文件尚未存在。如果已经存在一个同名的文件,则会抛出一个异常。该方案还假定文件夹C:\Results已经存在。把测试结果存入Excel工作簿的时候,你可以采用好几种组织策略。第一种,你可以只创建一个Excel结果文件,然后把许多不同的测试场景运行批次的结果插入这个文件。另外,你也可以为每个测试运行批次创建一个Excel结果文件。如果要创建许多个Excel结果文件,别忘了使用System.IO命名空间里的File.Exists()方法检查一下看是否有同名的文件夹已经存在。

第1章讲述的几种技术展示了如何在结果文件的文件名里加上时间戳,以及如何创建一个以时间戳命名的文件夹用来存放结果文件。你同样可以把这些技术应用于Excel数据文件。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论