1、在.NET 中不安装 Office 使用 EPPlus 生成带图表(Chart)的 Excel 报表在开发.NET 应用中可能会遇到需要生成带图表(Chart)的 Excel 报表的需求,特别是在一些 ASP.NET网站中,有时候我们并不能保证 Web 服务器上一定安装了 Office 组件,所以使用微软的 Office 来生成Excel 并不保证在所有情况下都使用,有时候即使 Web 服务器上安装了 Office 也会出现一些运行权限方面的原因到导致调用 Excel 组件生成 Excel 失败,所以在这里介绍一种无需安装 Office 并且无需较高权限就能生成 Excel 的方法。EPPlu
2、s 简介在介绍 EPPlus 之前,首先要介绍一下 Office Open XML。以下文字来自于维基百科(网址:http:/zh.wikipedia.org/wiki/Office_Open_XML,有删节):Office Open XML(缩写:Open XML、OpenXML 或 OOXML) ,是由 Microsoft 开发的一种以 XML为基础并以 ZIP 格式压缩的电子文件,支持 Word、Excel、Office Note、PPT 等文件格式。OOXML 在2006 年 12 月成为了 ECMA 规范的一部分,编号为 ECMA-376;并于 2008 年 4 月国际标准化组织(I
3、SO)的表決,在两个月公布为 ISO IEC 29500 国际标准。从 Microsoft Office 2007 开始,Office Open XML 文件格式已经成为 Microsoft Office 默认的文件格式。Microsoft Office 2010 支持对 ECMA-376 标准文档的读操作,ISO/IEC 29500 Transitional 的读/ 写,ISO/IEC 29500 Strict 的读取。Microsoft Office 2013 同时支持ISO/IEC 29500 Strict 的读写操作。EPPlus 就是一个通过 Open XML 方式来读写 Offic
4、e 文件的开源.NET 类库,所以使用它生成 Office 文件完全不需要 Microsoft Office(当然如果你需需要查看生成的文件就需要 Office 了) 。它的官方网址是:。如果需要体验本文中提到的效果,需要从这个网址下载最新版本的类库,我现在使用的这个名为EPPlus.dll 类库仅 658K,非常方便部署。代码示例为了演示 EPPlus 的用法,这里写了一个简单的例子,在这个例子里演示模拟了几大公司实际业绩与计划业绩的百分比,如果这个百分比大于 95%则会将所在的单元格显示为绿色,如果小于 90%则会显示为红色,否则就显示为黄色,并且还会生成一个图标来直观表示每月实际完成情况
5、与计划的百分比。完整代码如下:/* Project A report project* Module Name Excel Report* Author Zhou, Jin-Qiao (周金桥)* Creation Date 11/03/2013* Description Generate Excel Report with Chat demo by Epplus* * Copyright 2013 zhoufoxcn.* */using System;using System.Data;using System.Drawing;using System.IO;using OfficeOpen
6、Xml;using OfficeOpenXml.Drawing.Chart;using OfficeOpenXml.Style;namespace ExcelReportApplication/ / 使用 EPPlus 生成带图表(Chart)的 Excel 文件的例子,注意在运行的机器上无需安装 Office,因为 EPPlus 是使用基于 OpenXML 技术生成的 Excel 文件。/ 任何网站和个人均可在不对本代码做任何修改的情况下转载本文及本文中示例的代码用于非商业用途,任何除去版权的行为均为侵权。/ 作者:周公(周金桥) / 创建日期:2013-11-03 / 博客地址:http:
7、/ http:/ / 新浪微博地址:http:/ class ExcelExportPageprivate static readonly string MonthNames = new string “一月“, “二月“, “三月“, “四月“, “五月“, “六月 “, “七月 “, “八月“, “九月“, “十月“, “ 十一月“, “十二月“;/private static readonly string CommpanyNames = new string “Microsoft“, “IBM“, “Oracle“, “Amazon“, “Google“, “Facebook“, “T
8、witter“, “Paypal“, “Yahoo“, “HP“ ;private static readonly string CommpanyNames = new string “Microsoft“, “IBM“, “Oracle“, “Google“,“Yahoo“, “HP“ ;static void Main(string args)ExcelExportPage.GenerateExcelReport();/ / 周公(周金桥)说明:这个方法就是主要演示如何生成带图表(Chart) 的 Excel 文件的例子/ public static void GenerateExcelR
9、eport()string fileName = “ExcelReport-“+DateTime.Now.ToString(“yyyy_MM_dd_HHmmss“) + “.xlsx“;string reportTitle = “2013 年度五大公司实际情况与原计划的百分比“;FileInfo file = new FileInfo(“C:“+fileName);using (ExcelPackage package = new ExcelPackage(file)ExcelWorksheet worksheet = null;ExcelChartSerie chartSerie = nul
10、l;ExcelLineChart chart = null;#region researchworksheet = package.Workbook.Worksheets.Add(“Data“);DataTable dataPercent = GetDataPercent();/chart = Worksheet.Drawings.AddChart(“ColumnStackedChart“, eChartType.Line) as ExcelLineChart;chart = worksheet.Drawings.AddChart(“ColumnStackedChart“, eChartTyp
11、e.LineMarkers) as ExcelLineChart;/设置图表样式chart.Legend.Position = eLegendPosition.Right;chart.Legend.Add();chart.Title.Text = reportTitle;/设置图表的名称/chart.SetPosition(200, 50);/设置图表位置chart.SetSize(800, 400);/设置图表大小chart.ShowHiddenData = true;/chart.YAxis.MinorUnit = 1;chart.XAxis.MinorUnit = 1;/设置 X 轴的最
12、小刻度/chart.DataLabel.ShowCategory = true;chart.DataLabel.ShowPercent = true;/显示百分比/设置月份for (int col = 1; col = 0.90d DataRow row = null;Random random=new Random();data.Columns.Add(new DataColumn(“公司名“, typeof(string);foreach(string monthName in MonthNames)data.Columns.Add(new DataColumn(monthName, ty
13、peof(double);/每个公司每月的百分比表示完成的业绩与计划的百分比for (int i = 0; i CommpanyNames.Length; i+)row = data.NewRow();row0 = CommpanyNamesi;for (int j = 1; j = MonthNames.Length; j+)/这里采用了随机生成数据,但假定每家公司至少完成了计划的 85%以上rowj = 0.85d + random.Next(0, 15) / 100d;data.Rows.Add(row);return data;最终生成的 Excel 文件内容如下:周公(周金桥)2013 年 11 月 4 日凌晨于武汉