Download C# project - 7.1 KB 介紹 在我的編程博客中,我經常會比較不同算法或原理的性能特征。我常常會把性能日志(如花費時間)輸出到控制台或者文本文件,然後復制到電子表格中加以分析。但是最近,我發現一個新方法:我可以使用 Spire.XSL 類庫來生成最終的電子表格--包含所有的表格和圖表!接下來我將講講如何使用這個類來完成各種自動化任務。 案例 我們的目標是創建一個基准測試程序,用於測試三種不同的排序算法。我們為不同的算法所花費的時間計數。下面是簡單的代碼:
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, 10, 200, 10); 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[0]; sheet.Range["A1"].Text = "Hello,World!"; wb.SaveToFile("Sample.xls", ExcelVersion.Version2007);
上述代碼可以讓我們了解怎樣使用這一類庫。基本上你可以很容易地操作工作簿、工作表和單元格。
改進的解決方案
讓我們回到開頭描述的問題。我們的新解決方案將保留輸出到控制台部分,但是我們直接將結果保存成excel文件。除此之外,我們還可以創建圖表。這種方式將節省很多時間--不需要一遍遍地復制和生成圖表。。。下面是保存數據相關的代碼片段:
Worksheet sheet = workbook.Worksheets[0]; 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+"3"].Text = n; sheet.Range[col+"3"].Style.Font.IsBold = true; sheet.Range[col+"3"].Style.HorizontalAlignment = HorizontalAlignType.Center; col++; } // 將數據插入行...
接下來是生成圖表部分代碼:
Chart chart = sheet.Charts.Add(); //設置圖表數據區域 chart.DataRange = workbook.Worksheets[0].Range[range]; chart.SeriesDataFromRange = false; //設置圖表位置chart.LeftColumn = 2; chart.TopRow = 2; chart.RightColumn = 12; chart.BottomRow = 30; //圖表標題chart.ChartTitle = "Sorting Time..."; chart.ChartTitleArea.IsBold = true; chart.ChartTitleArea.Size = 12; // ... chart.Legend.Position = LegendPositionType.Bottom; chart.ChartType = ExcelChartType.ScatterSmoothedLineMarkers;
看,就這麼簡單!我特別喜歡的一點,就是我們可以得到一個單元格,或者整個區域。看看要改變一個單元格的樣式有多麼簡單。下圖是最終的excel文件,當然是自動生成的:
還有圖表:
使用Spire.XLS的好處
總結
在本文中,我展示了我們可以通過程序自動化地生成性能報表。通過使用Spire.XLS,碼農們可以在不要求安裝office的情況下創建和操作Excel文件。這是一個非常強大的類庫,而且非常非常容易使用。我們創建報表的工作可以通過短短幾行代碼自動化地實現。另外,Spire.DOC 或者 Spire.PDF也是非常好的類庫。
附注和鏈接
原文:http://www.codeproject.com/Articles/783414/Automated-Reports-with-Spire-XLS