在.NET中不安装Office使用EPPlus生成带图表的Excel报表

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的需求,特别是在一些ASP.NET网站中,有时候我们并不能保证Web服务器上一定安装了Office组件,所以使用微软的Office来生成Excel并不保证在所有情况下都使用,有时候即使Web服务器上安装了Office也会出现一些运行权限方面的原因到导致调用Excel组件生成Excel失败,所以在这里介绍一种无需安装Office并且无需较高权限就能生成Excel的方法。EPPlus简介在介绍EPPlus之前,首先要介绍一下OfficeOpenXML。以下文字来自于维基百科(网址:,有删节):OfficeOpenXML(缩写:OpenXML、OpenXML或OOXML),是由Microsoft开发的一种以XML为基础并以ZIP格式压缩的电子文件,支持Word、Excel、OfficeNote、PPT等文件格式。OOXML在2006年12月成为了ECMA规范的一部分,编号为ECMA-376;并于2008年4月国际标准化组织(ISO)的表決,在两个月公布为ISO/IEC29500国际标准。从MicrosoftOffice2007开始,OfficeOpenXML文件格式已经成为MicrosoftOffice默认的文件格式。MicrosoftOffice2010支持对ECMA-376标准文档的读操作,ISO/IEC29500Transitional的读/写,ISO/IEC29500Strict的读取。MicrosoftOffice2013同时支持ISO/IEC29500Strict的读写操作。EPPlus就是一个通过OpenXML方式来读写Office文件的开源.NET类库,所以使用它生成Office文件完全不需要MicrosoftOffice(当然如果你需需要查看生成的文件就需要Office了)。它的官方网址是:。如果需要体验本文中提到的效果,需要从这个网址下载最新版本的类库,我现在使用的这个名为EPPlus.dll类库仅658K,非常方便部署。代码示例为了演示EPPlus的用法,这里写了一个简单的例子,在这个例子里演示模拟了几大公司实际业绩与计划业绩的百分比,如果这个百分比大于95%则会将所在的单元格显示为绿色,如果小于90%则会显示为红色,否则就显示为黄色,并且还会生成一个图标来直观表示每月实际完成情况与计划的百分比。完整代码如下:/***********************************************************************************ProjectAreportproject*ModuleNameExcelReport*AuthorZhou,Jin-Qiao(周金桥)*CreationDate[11/03/2013]*DescriptionGenerateExcelReportwithChatdemobyEpplus**©Copyright2013zhoufoxcn.**********************************************************************************/usingSystem;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingOfficeOpenXml;usingOfficeOpenXml.Drawing.Chart;usingOfficeOpenXml.Style;namespaceExcelReportApplication{///summary///使用EPPlus生成带图表(Chart)的Excel文件的例子,注意在运行的机器上无需安装Office,因为EPPlus是使用基于OpenXML技术生成的Excel文件。///任何网站和个人均可在不对本代码做任何修改的情况下转载本文及本文中示例的代码用于非商业用途,任何除去版权的行为均为侵权。///作者:周公(周金桥)///创建日期:2013-11-03///博客地址:://zhoufoxcn.blog.51cto.com///新浪微博地址:{privatestaticreadonlystring[]MonthNames=newstring[]{一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月};//privatestaticreadonlystring[]CommpanyNames=newstring[]{Microsoft,IBM,Oracle,Amazon,Google,Facebook,Twitter,Paypal,Yahoo,HP};privatestaticreadonlystring[]CommpanyNames=newstring[]{Microsoft,IBM,Oracle,Google,Yahoo,HP};staticvoidMain(string[]args){ExcelExportPage.GenerateExcelReport();}///summary///周公(周金桥)说明:这个方法就是主要演示如何生成带图表(Chart)的Excel文件的例子////summarypublicstaticvoidGenerateExcelReport(){stringfileName=ExcelReport-+DateTime.Now.ToString(yyyy_MM_dd_HHmmss)+.xlsx;stringreportTitle=2013年度五大公司实际情况与原计划的百分比;FileInfofile=newFileInfo(C:\\+fileName);using(ExcelPackagepackage=newExcelPackage(file)){ExcelWorksheetworksheet=null;ExcelChartSeriechartSerie=null;ExcelLineChartchart=null;#regionresearchworksheet=package.Workbook.Worksheets.Add(Data);DataTabledataPercent=GetDataPercent();//chart=Worksheet.Drawings.AddChart(ColumnStackedChart,eChartType.Line)asExcelLineChart;chart=worksheet.Drawings.AddChart(ColumnStackedChart,eChartType.LineMarkers)asExcelLineChart;//设置图表样式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轴的最小刻度//chart.DataLabel.ShowCategory=true;chart.DataLabel.ShowPercent=true;//显示百分比//设置月份for(intcol=1;col=dataPercent.Columns.Count;col++){worksheet.Cells[1,col].Value=dataPercent.Columns[col-1].ColumnName;}//设置数据for(introw=1;row=dataPercent.Rows.Count;row++){for(intcol=1;col=dataPercent.Columns.Count;col++){stringstrValue=dataPercent.Rows[row-1][col-1].ToString();if(col==1){worksheet.Cells[row+1,col].Value=strValue;}else{doublerealValue=double.Parse(strValue);worksheet.Cells[row+1,col].Style.Fill.PatternType=ExcelFillStyle.Solid;worksheet.Cells[row+1,col].Style.Numberformat.Format=#0\\.00%;//设置数据的格式为百分比worksheet.Cells[row+1,col].Value=realValue;if(realValue0.90d)//如果小于90%则该单元格底色显示为红色{worksheet.Cells[row+1,col].Style.Fill.BackgroundColor.SetColor(Color.Red);}elseif(realValue=0.90d&&realValue=0.95d)//如果在90%与95%之间则该单元格底色显示为黄色{worksheet.Cells[row+1,col].Style.Fill.BackgroundColor.SetColor(Color.Yellow);}else{worksheet.Cells[row+1,col].Style.Fill.BackgroundColor.SetColor(Color.Green);//如果大于95%则该单元格底色显示为绿色}}}//chartSerie=chart.Series.Add(worksheet.Cells[A2:M2],worksheet.Cells[B1:M1]);//chartSerie.HeaderAddress=worksheet.Cells[A2];//chart.Series.Add()方法所需参数为:chart.Series.Add(X轴数据区,Y轴数据区)chartSerie=chart.Series.Add(worksheet.Cells[row+1,2,row+1,2+dataPercent.Columns.Count-2],worksheet.Cells[B1:M1]);chartSerie.HeaderAddress=worksheet.Cells[row+1,1];//设置每条线的名称}//因为假定每家公司至少完成了80%以上,所以这里设置Y轴的最小刻度为80%,这样使图表上的折线更清晰chart.YAxis.MinValue=0.8d;//chart.SetPosition(200,50);//可以通过制定左上角坐标来设置图表位置//通过指定图表左上角所在的行和列及对应偏移来指定图表位置//这里CommpanyNames.Length+1及3分别表示行和列chart.SetPosition(CommpanyNames.Length+1,10,3,20);#endregionresearchpackage.Save();//保存文件}}///summary///生成数据,由于这一步不是主要逻辑,所以采用随机生成数据的方式,实际中可根据需要从数据库或其它数据源中读取需要的数据////summary

1 / 5
下载文档,编辑使用

©2015-2020 m.111doc.com 三一刀客.

备案号:赣ICP备18015867号-1 客服联系 QQ:2149211541

×
保存成功