在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的需求,特别是在一些ASP.NET网站中,有时候我们并不能保证Web服务器上一定安装了Office组件,所以使用微软的Office来生成Excel并不保证在所有情况下都使用,有时候即使Web服务器上安装了Office也会出现一些运行权限方面的原因到导致调用Excel组件生成Excel失败,所以在这里介绍一种无需安装Office并且无需较高权限就能生成Excel的方法。

EPPlus简介

  在介绍EPPlus之前,首先要介绍一下Office Open XML。以下文字来自于维基百科(网址: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月国际标准化组织(ISO)的表決,在两个月公布为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方式来读写Office文件的开源.NET类库,所以使用它生成Office文件完全不需要Microsoft Office(当然如果你需需要查看生成的文件就需要Office了)。它的官方网址是:http://epplus.codeplex.com/。如果需要体验本文中提到的效果,需要从这个网址下载最新版本的类库,我现在使用的这个名为EPPlus.dll类库仅658K,非常方便部署。

代码示例

  为了演示EPPlus的用法,这里写了一个简单的例子,在这个例子里演示模拟了几大公司实际业绩与计划业绩的百分比,如果这个百分比大于95%则会将所在的单元格显示为绿色,如果小于90%则会显示为红色,否则就显示为黄色,并且还会生成一个图标来直观表示每月实际完成情况与计划的百分比。

  完整代码如下:

/***********************************************************************************    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 OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Style;
namespace ExcelReportApplication
{/// <summary>/// 使用EPPlus生成带图表(Chart)的Excel文件的例子,注意在运行的机器上无需安装Office,因为EPPlus是使用基于OpenXML技术生成的Excel文件。/// 任何网站和个人均可在不对本代码做任何修改的情况下转载本文及本文中示例的代码用于非商业用途,任何除去版权的行为均为侵权。/// 作者:周公(周金桥) /// 创建日期:2013-11-03 /// 博客地址:http://blog.csdn.net/zhoufoxcn http://zhoufoxcn.blog.51cto.com /// 新浪微博地址:http://weibo.com/zhoufoxcnpublic class ExcelExportPage{private static readonly string[] MonthNames = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};//private static readonly string[] CommpanyNames = new string[] { "Microsoft", "IBM", "Oracle", "Amazon", "Google", "Facebook", "Twitter", "Paypal", "Yahoo", "HP" };private static readonly string[] CommpanyNames = new string[] { "Microsoft", "IBM", "Oracle", "Google","Yahoo", "HP" };static void Main(string[] args){ExcelExportPage.GenerateExcelReport();}/// <summary>/// 周公(周金桥)说明:这个方法就是主要演示如何生成带图表(Chart)的Excel文件的例子/// </summary>public static void GenerateExcelReport(){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 = null;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", eChartType.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轴的最小刻度//chart.DataLabel.ShowCategory = true;chart.DataLabel.ShowPercent = true;//显示百分比//设置月份for (int col = 1; col <= dataPercent.Columns.Count; col++){worksheet.Cells[1, col].Value = dataPercent.Columns[col - 1].ColumnName;}//设置数据for (int row = 1; row <= dataPercent.Rows.Count; row++){for (int col = 1; col <= dataPercent.Columns.Count; col++){string strValue = dataPercent.Rows[row - 1][col - 1].ToString();if (col == 1){worksheet.Cells[row + 1, col].Value = strValue;}else{double realValue = 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 (realValue< 0.90d)//如果小于90%则该单元格底色显示为红色{worksheet.Cells[row + 1, col].Style.Fill.BackgroundColor.SetColor(Color.Red);}else if (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);#endregion researchpackage.Save();//保存文件}}/// <summary>/// 生成数据,由于这一步不是主要逻辑,所以采用随机生成数据的方式,实际中可根据需要从数据库或其它数据源中读取需要的数据/// </summary>/// <returns></returns>private static DataTable GetDataPercent(){DataTable data = new DataTable();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, typeof(double)));}//每个公司每月的百分比表示完成的业绩与计划的百分比for (int i = 0; i < CommpanyNames.Length; i++){row = data.NewRow();row[0] = CommpanyNames[i];for (int j = 1; j <= MonthNames.Length; j++){//这里采用了随机生成数据,但假定每家公司至少完成了计划的85%以上row[j] = 0.85d + random.Next(0, 15) / 100d;}data.Rows.Add(row);}return data;}}
}

  最终生成的Excel文件内容如下:

  周公(周金桥)

  2013年11月4日凌晨于武汉

更多资讯,请关注本人微信订阅号:

在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表相关推荐

  1. 不安装Office操作Excel文件(.xlsx)

    1.使用场景: 在不安装Office组件包的情况下,操作Excel文件(.xlsx).以前做过的好几个项目中,都需要对Excel文件处理,特别是将统计成果按照一定的格式和样式输出到Excel中,或将固 ...

  2. 计算机有残留office,电脑中无法安装Office2013删除残留文件的方法

    ? ? 近来有用户反映在电脑中无法安装Office2013办公软件,在安装的过程中一直出现失败的提示,无法成功安装.之所以出现这样的问题,很多情况是由于 电脑系统 中残留有之前Office的相关文件, ...

  3. 关于安装Office之后,右键新建菜单中没有Word、PPT、Excel选项

    文章目录 前言 一.个人感觉比较好用的方法: 二.该问题产生的原因 总结 前言   今天刚重装完系统,发现安装Office之后,右键新建菜单中没有Word.PPT.Excel选项.百度了下,相关问题的 ...

  4. 使用hutool-poi在未安装Office或wps软件的电脑中生成Excel的xls后缀消失问题

    使用hutool-poi在未安装Office或wps软件的电脑中生成Excel的xls后缀消失问题 由于项目中存在日志导出功能,会将查找的日志数据生成Excel文件并下载,在开发和测试过程中,该功能并 ...

  5. 安装计算机的程序包,win10电脑中安装office提示无法打开此安装包请确认该程序包存在如何解决...

    在Win10系统中办公软件office是比较常见的软件,该软件可以帮助用户完成很多文件处理的任务,该软件分为企业版和家庭版本的,我们在安装的时候难免会遇到一些问题,最近小编在安装新版本的office时 ...

  6. [Office]Win7(x64)旗舰版安装Office 2013专业版的过程中提示在安装过程中出错

    博主在重装系统之后准备安装Office 2013,结果在快安装结束的时候提示:Micrsoft Office Professional Plus 2013 在安装过程中出错. 紧接着就出现Micros ...

  7. pptx文件无法读取_如何在未安装Office的情况下查看PPTX,DOCX或XLSX文件中的图像...

    pptx文件无法读取 There's nothing more frustrating than finally getting the screenshot or image you asked f ...

  8. 如何在不安装Microsoft Office的情况下用C#创建Excel(.XLS和.XLSX)文件?

    如何在不使用运行代码的计算机上安装Excel的情况下使用C#创建Excel电子表格? #1楼 我成功地使用了以下开源项目: OOXML格式的ExcelPackage(Office 2007) .XLS ...

  9. 真正能解决 Windows 7下安装Office 2007—2010出现1402和1406类错误的方法

    真正能解决 Windows 7下安装Office 2007-2010出现1402和1406类错误的方法 天蚕 原创 2012-06-11 近日在网上下载了Windows7和Office2007,想将家 ...

最新文章

  1. python当中的生成器
  2. 移动平台WEB前端开发技巧汇总
  3. php 检查语法命令,php语法检查的方法有哪些?(代码示例)
  4. 修复VMware 下Ubuntu启动不了问题
  5. 处理导出到EXCEL时,身份证号码的问题:mso-number-format
  6. nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)...
  7. Blender软件的一些快捷键
  8. 用了很多年的PC端离线版个人知识管理软件PKM2 Manager推荐给大家
  9. 【2022】保姆级Android studio+JDK下载安装配置教程(带视频)
  10. 数据类型不一致: 应为 NUMBER, 但却获得 BINARY
  11. 十一黄金周旅游线路排行榜(图文)
  12. 《快速掌握PyQt5》第二章 信号与槽——裁判鸣枪与选手开跑
  13. 在ESNP中还原内网私接小路由器导致用户无法上网场景
  14. 为了不手动命名驼峰变量名,我开发了一套油猴脚本...
  15. 手机连接投影机的步骤_手机怎么连接投影仪?这几招实用
  16. yolov7运行自己的VOC格式数据集
  17. 聊天记录:李维、左轻侯、周爱民谈Diamondback
  18. 360 政企安全集团基于 Flink 的 PB 级数据即席查询实践
  19. 【文章阅读】The Devil is in the Decoder【计算机视觉中的上采样方式-6种】
  20. 控制QTextEdit中字体颜色

热门文章

  1. c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版
  2. 【新星计划】MATLAB-定义函数
  3. matlab datetime时间处理、时间转换
  4. python: line=f.readlines() 后如何消除line中的’\n’
  5. node process.env
  6. mysql远程无法登陆_无法远程登陆MySQL数据库几种解决办法
  7. python读取二进制数据中的while循环_在Python中读取二进制文件并循环遍历每个字节...
  8. 【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封
  9. 【自动驾驶】21.左手坐标系和右手坐标系
  10. Caffe代码导读(0):路线图