【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!
abstract class PerfTestBase
{
public double ElapsedTimeSec {get; protected set;}
public string Name {get; protected set;}
public abstract void run(int n);
}
class BubbleSortPerfTest : PerfTestBase
{
public BubbleSortPerfTest()
{
Name = "Bubble Sort";
}
public override void run(int n)
{
// 实现部分
ElapsedTimeSec = X;
}
}
class MergeSortPerfTest : PerfTestBase
{
public MergeSortPerfTest()
{
Name = "Merge Sort";
}
public override void run(int n)
{
// 实现部分 ElapsedTimeSec = X;
}
}
class QuickSortPerfTest : PerfTestBase
{
public QuickSortPerfTest()
{
Name = "Quick Sort";
}
public override void run(int n)
{
// 实现部分
ElapsedTimeSec = X;
}
}
算法已经准备好了,现在我们需要运行它们并加入不同的启动参数。
List<PerfTestBase> perfTests = new List<PerfTestBase>
{
new BubbleSortPerfTest(),
new MergeSortPerfTest(),
new QuickSortPerfTest()
};
// N 从 10 加到 200, 每次增长 10
var res = runAllTests(perfTests, , , );
printResults(res);
runAllTests这个功能只需通过设置N的值就能容易的进行循环迭代,调用 .run(N)方法。最有意思的部分,是printResults 方法部分。哪些代码可以自动生成报表和有价值的结果呢?
最简单解决方案
最开始时,当然我们可以将它打印到控制台。我们甚至可以使用CSV格式,然后轻松地把结果复制到电子表格里。
N;Bubble Sort;Merge Sort;Quick Sort;
10;20,00;140,46;96,71;
20;80,00;365,48;251,64;
过一段时间,当你不断地修改你的算法代码,复制结果的工作就显得乏味无比。当然,必须要有一个更快,更好的方法。如果我们不生成CSV文件,而是直接生成excel文件呢?现在应该介绍一下 Spire.XLS 类库了。
Spire.XLS 类库介绍
E-IceBlue 的Spire.XSL 是一个功能强大,易于使用的类库,它另office的自动化操作变得非常容易。很多世界500强的企业都在使用它,这个品牌是受人尊敬和众所周知的。
简要概述:首先在你的项目中添加对Spire.XLS的引用。接下来你就可以创建、打开、修改、运行所有计算,而不需要安装excel或者office。
这一类库与 Excel 97/2003, 2007 and 2010完全兼容。
另外,Spire.XLS还可以保护、加密文件,更厉害的,它还能转换格式。例如,你可以把你的文件转换成PDF、图像或者HTML文件。
这一解决方案使我们创建有价值的自动化程序变得非常简单。
在代码中使用Spire.XSL
在我们的例子中,我们只使用了这个强大类库功能中的1%。即使这样,它已经可以节省大量的生成报表的时间了。
基本使用

添加引用:
using Spire.Xls; using Spire.Xls.Charts;
四行代码创建'Hello World' 工作簿:
Workbook wb = new Workbook();
Worksheet sheet = wb.Worksheets[];
sheet.Range["A1"].Text = "Hello,World!";
wb.SaveToFile("Sample.xls",
ExcelVersion.Version2007);
上述代码可以让我们了解怎样使用这一类库。基本上你可以很容易地操作工作簿、工作表和单元格。
改进的解决方案
让我们回到开头描述的问题。我们的新解决方案将保留输出到控制台部分,但是我们直接将结果保存成excel文件。除此之外,我们还可以创建图表。这种方式将节省很多时间--不需要一遍遍地复制和生成图表。。。下面是保存数据相关的代码片段:
Worksheet sheet = workbook.Worksheets[];
sheet.Name = "Perf Test";
sheet.Range["A1"].Text = "Elapsed Time for sorting...";
sheet.Range["A1"].Style.Font.IsBold = true;
// 列标题:
sheet.Range["C3"].Text = "N";
sheet.Range["C3"].Style.Font.IsBold = true;
sheet.Range["C3"].Style.HorizontalAlignment = HorizontalAlignType.Center;
char col = 'D';
foreach (var n in res.Map.Keys)
{
sheet.Range[col+""].Text = n;
sheet.Range[col+""].Style.Font.IsBold = true;
sheet.Range[col+""].Style.HorizontalAlignment = HorizontalAlignType.Center;
col++;
}
// 将数据插入行...
接下来是生成图表部分代码:
Chart chart = sheet.Charts.Add();
//设置图表数据区域
chart.DataRange = workbook.Worksheets[].Range[range];
chart.SeriesDataFromRange = false;
//设置图表位置chart.LeftColumn = 2;
chart.TopRow = ;
chart.RightColumn = ;
chart.BottomRow = ;
//图表标题chart.ChartTitle = "Sorting Time...";
chart.ChartTitleArea.IsBold = true;
chart.ChartTitleArea.Size = ;
// ...
chart.Legend.Position = LegendPositionType.Bottom;
chart.ChartType = ExcelChartType.ScatterSmoothedLineMarkers;
看,就这么简单!我特别喜欢的一点,就是我们可以得到一个单元格,或者整个区域。看看要改变一个单元格的样式有多么简单。下图是最终的excel文件,当然是自动生成的:

还有图表:

使用Spire.XLS的好处
- 很多种方式来自动完成你的任务 - 无需安装office
- 良好完整的文档
- 易于使用:只需要下载,然后修改你的代码,在安装和编译中毫无问题。
- 免费版也足够使用
- 多家500强企业使用
总结
在本文中,我展示了我们可以通过程序自动化地生成性能报表。通过使用Spire.XLS,码农们可以在不要求安装office的情况下创建和操作Excel文件。这是一个非常强大的类库,而且非常非常容易使用。我们创建报表的工作可以通过短短几行代码自动化地实现。另外,Spire.DOC 或者 Spire.PDF也是非常好的类库。
附注和链接
- 性能:在这里看他们的与OLE性能比较测试, 看起来Spire.XLS要比OLE方式强很多.
- 这里是他们的快速上手手册
- 这一类库是为.net设计的,但是在本机代码中也可以使用同样的解决方案。我需要测试时,我们可以创建一个"桥",然后从C++程序中调用.net类库。C++程序可以完美运行,但是所有的报表是通过.net模块调用Spire.XLS来生成的。
原文:http://www.codeproject.com/Articles/783414/Automated-Reports-with-Spire-XLS
【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!的更多相关文章
- Spire.XLS,生成Excel文件、加载Excel文件
一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...
- c# winform打印excel(使用NPOI+Spire.xls+PrintDocument直接打印excel)
前言 c#做winform程序要求生成并打印Excel报告,为了不安装Office相应组件,我选择了NPOI来生成Excel报告,用winform的PrintDocument控件来触发打印操作,而难点 ...
- iOS开发 iOS10推送必看
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
- iOS 10 推送必看(高阶1)
来源:徐不同 链接:http://www.jianshu.com/p/3d602a60ca4f iOS10 推送必看(基础篇) 虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可 ...
- iOS10推送必看UNNotificationAttachment以及UNTimeIntervalNotificationTrigger
虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- iOS10推送必看UNNotificationServiceExtension
转:http://www.cocoachina.com/ios/20161017/17769.html (收录供个人学习用) iOS10推送UNNotificationServic 招聘信息: 产品经 ...
- 【资料目录收藏】.NET开发必看资料53个 经典源码77个
简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 基于.net构架的留言板项目大全源码 http://down.51cto.com/z ...
- 【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
原文网址:http://bbs.51cto.com/thread-1099956-1.html 亲爱的学员们: 如今,各路开发者为淘一桶金也纷纷转入iOS开发的行列.你心动了吗?想要行动吗?知道如何做 ...
随机推荐
- Golang 绘图技术(image/draw包介绍)
image/draw 包仅仅定义了一个操作:通过可选的蒙版图(mask image),把一个原始图片绘制到目标图片上,这个操作是出奇的灵活,可以优雅和高效的执行很多常见的图像处理任务. 1 ...
- IIS6到7,web.config的配置
如果在IIS6中你的web.config中是以下配置: 这是在IIS6中我们习惯的经典模式的配置 < system.web> " " " " &q ...
- java开发eclipse常见问题(一)The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
最近刚开始用Eclipse开发,刚开始都是按教程一步一步的新建web工程也没出现什么问题. 今天选了一个新的workspace,建了个web工程发现最简单的jsp页面都报错:The superclas ...
- PHPCMS V9实现硬件地址MAC绑定访问技术实现
目的:会员登录需要 用户名.密码.身份识别码(新增字段) 效果: 解决方法: 目前数据库中macaddress字段已经添加,修改了phpcms\modules\member\index.php 63 ...
- webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器
#webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器 -- 工欲善其事 必先利其器 ##各工具介绍 `webstorm`是**JetBrains* ...
- C#获取ftp文件最后修改时间
public static DateTime GetFileModifyDateTime(string ftpServerIP,string ftpFolder,string ftpUserID,st ...
- Compiling Xen-4.4 From Source And Installing It On Ubuntu Server (Amd-64)
First of all, you should install a clean Ubuntu Server (Amd-64) on your server. (Version 14.04 is st ...
- 给一已经排序数组A和x,求A中是否包含两个元素之和为x
亲爱的大神老爷们,这是小渣第一次写blog,欢迎大家来喷(批评指正),算法渣因为面试中连这道题都不会写就自己琢磨了一下,也参考了网上大家的做法 解法一: 思路:从首尾向目的靠拢,因为已经排序,[假设存 ...
- URAL-1991 The battle near the swamp 水题
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1991 水题.. //STATUS:C++_AC_15MS_333KB #include ...
- Time vs Story Points Estimation [转]
One of the most common questions we get is whether to estimate in time or points. It seems like poin ...