生成自动化数据表
在我的编程博客中,我经常会对比不同算法和概念的结果特征。通常我会把执行结果(像运行时间)载入到控制台或一个文本文档然后再将他们复制到数据表格中分析。最近呢,我发现了实现这一系列操作的另外一种方法:我用了下Spire.XSL 库来生成最后的电子表格 – 处理所有的表格和图表哦!阅读下面的内容你将会学到如何利用这个函数库来完成各种不同的自动化任务。
Download C# project - 7.1 KB, zip
示例
我们的目标是创建一个标准检查应用程序,我们要在这上面测试三种不同的算法。我们想根据元素数量得到运行时间。以下是要用到的一段简单代码:
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)
{
// real implementation here
ElapsedTimeSec = X;
}
}
class MergeSortPerfTest : PerfTestBase
{
public MergeSortPerfTest()
{
Name = "Merge Sort";
}
public override void run(int n)
{
// real implementation here
ElapsedTimeSec = X;
}
}
class QuickSortPerfTest : PerfTestBase
{
public QuickSortPerfTest()
{
Name = "Quick Sort";
}
public override void run(int n)
{
// real implementation here
ElapsedTimeSec = X;
}
}
算法有了,现在我们需要用不同的起始参数来运行他们。
{
new BubbleSortPerfTest(),
new MergeSortPerfTest(),
new QuickSortPerfTest()
};
// N from 10 up to 200, step is 10
var res = runAllTests(perfTests, 10, 200, 10);
方法runAllTests 通过设置N的值并调用.run(N) 方法进行简单迭代。
不过我们感兴趣的部分是printResults方法。我们要用什么代码来自动生成报表并得出重要的结果呢?
最简单的解决方案
起初我们想的是将所有结果列印至控制台。我们甚至可以使用CSV样式然后很容易地把它复制到电子表格。
10;20,00;140,46;96,71;
20;80,00;365,48;251,64;
过一会,当我们继续变换算法的代码,复制结果的工作变得冗长乏味。肯定会有更好更快的方法的。如果我们生成的不是CSV文件而是完全的Excel文件呢?
在这就是引入Spire.XLS的绝妙时机了。
介绍Spire.XLS
Spire.XLS 是一个使Office办公自动化操作更简便的函数库
简单地说:添加Spire.XLS的引用到你的程序中你就可以实现创建,打开,升级,输出计算结果,而这些操作并不需要你的操作系统中安装微软的Excel或Office。
这个函数库完全兼容Excel 97/2003, 2007 和2010。
添加引用后的Spire.XLS还可以添加保护,压缩文件,甚至可以转换成其他格式的文件。例如你可以将你的文件输出为PDF, 图像或者 HTML文件。
通过这种方法我们可以轻松实现重要的自动化程序。
在代码中使用Spire.XSL
在我们的示例中,我们可能只用到这个函数库的1%的功能!尽管如此他还是为我们的报表生成节省了不少时间。
基本用法
添加引用:
using Spire.Xls.Charts;
四行代码创建“Hello World”工作簿:
Worksheet sheet = wb.Worksheets[0];
sheet.Range["A1"].Text = "Hello,World!";
wb.SaveToFile("Sample.xls",
ExcelVersion.Version2007);
以上代码让我们对这个函数库有了个初步认识。基本上我们就可以对工作表,单个工作簿和单独的单元格进行便捷的操作了。
进阶解决方案
让我们回到我们最原始的问题上。我们的新的解决方案是保持控制台的输出部分,另外输出结果依旧要保存到Excel文件中。也就是说,我们要创建一个图表。使用这种方法,可以节省很多时间 – 因为不用一遍又一遍地复制和再生成图表……
下面是关于保存数据的部分的代码:
sheet.Name = "Perf Test";
sheet.Range["A1"].Text = "Elapsed Time for sorting...";
sheet.Range["A1"].Style.Font.IsBold = true;
// columns title:
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+"3"].Text = n;
sheet.Range[col+"3"].Style.Font.IsBold = true;
sheet.Range[col+"3"].Style.HorizontalAlignment = HorizontalAlignType.Center;
col++;
}
// insert values into rows...
再下面是一些图表生成的代码:
//Set region of chart data
chart.DataRange = workbook.Worksheets[0].Range[range];
chart.SeriesDataFromRange = false;
//Set position of chart
chart.LeftColumn = 2;
chart.TopRow = 2;
chart.RightColumn = 12;
chart.BottomRow = 30;
//Chart title
chart.ChartTitle = "Sorting Time...";
chart.ChartTitleArea.IsBold = true;
chart.ChartTitleArea.Size = 12;
// ...
chart.Legend.Position = LegendPositionType.Bottom;
chart.ChartType = ExcelChartType.ScatterSmoothedLineMarkers;
就这么简单!!
我特别欣赏这样可以单个地选中单元格或者选中整行。注意改变单元格的样式是多么简单。
最终的Excel文件 – 当然是自动生成的:
还有图表
类似函数库
如果你想使用开源代码,
ClosedXML – 使用ClosedXML可以创建Excel 2007/2010 文件而不用安装Excel程序。
EPPlus - 使用这个库可以读取和编辑Excel 2007/2010文件,但仅支持Open Office Xml格式 (xlsx)。
NPOI - 一个开源工程,可以帮助你读取/编辑xls, doc, ppt文件。
总结
在本篇文章中,我向大家展示了如何简单地把程序中的结果自动生成为数据表展示。通过使用Spire.XLS,编程者们可以在系统无安装Office的情况下创建并处理Excel文件。这个函数库十分强大但是使用却很简便。我们的任务 – 创建运行结果表 – 就可以利用几行代码自动生成了。