一款强大的Office插件,教你如何自动生成Excel图表

项目背景:

在项目里面需要根据数据进行Excel的导出,但有时候不仅仅需要导出数据,而且还需要根据数据进行生成图表进行展示。之前的做法是先在模板里面进行公式的设定如下图1.1。这样就会遇到一个问题,那就是有一天需要不断的增加部门,一个两个还好,若突然需要加十几个或者二十几个,或者不是以部门为纵轴,那么可想而知改动就比较麻烦了,需要不断的修改模板,并且上传,而且这样的改法也比较死板,不适合。1.1图

如何解决

第一步:先查阅目前项目中所使用的NPOI相关的文档,看这个能不能支持相关的操作。很遗憾,没有找到相关类似的解决方案(希望大伙给予指点)。

第二步:Google下看看能不能找到相关的之前解决的文章。查阅了一些论坛都没有这方面的都没有类似的解决方案,就在要放弃的时候突然发现了@asxinyu大神的文章,是"C#操作Excel组件Spire.XLS系列文章目录"。突然之间就如同发现新大陆一样,兴奋不已。于是请教@asxinyu,给我回答就是Spire.xls操作图标就是太容易了。由于大神的那篇如何自动生成图表的还没发表。只有按照大神给我的这个组件的官网,我去先研究了Spire.xls

NPOI与Spire.xls的区别

关于这两者的区别,我就不在这里累赘叙述了,有兴趣的可以查阅.NET读写Excel工具Spire.Xls使用(1)入门介绍。这里详细的介绍了关于两者的区别。

生成Excel文件


//读取事先创建的模板,里面的可以创建空的行与列,这样的好处就是避免在代码里面写多余创建行与列的代码

FileStream stream = new FileStream(@"C:\Projects\SpirexlsDemo\SpirexlsDemo\Template\exportTempate.xls", FileMode.Open, FileAccess.Read);

//引用spirexls组件创建excel

Workbook workbook = new Workbook();

//将事先的模板的流载入excel中

workbook.LoadFromStream(stream);

//根据需求获取所需要的sheet

Worksheet sheet = workbook.Worksheets[0];

这边我读取的文档也是模板,只不过我这边的模板是里面的插入了多个空的行数的Excel,因为这样的好处就是避免在代码里面进行创建行与列了。

创建Excel内容


public class CompanyData

{

/// <summary>

/// 公司名称

/// </summary>

public string CompanyName { get; set; }

}

//模拟创建公司的集合

var companys = CreateCompanyData();

//月报的计算当月的实际天数

int days = DateTime.DaysInMonth(2015, 2);

//读取事先创建的模板,里面的可以创建空的行与列,这样的好处就是避免在代码里面写多余创建行与列的代码

FileStream stream = new FileStream(@"C:\Projects\SpirexlsDemo\SpirexlsDemo\Template\exportTempate.xls", FileMode.Open, FileAccess.Read);

//引用spirexls组件创建excel

Workbook workbook = new Workbook();

//将事先的模板的流载入excel中

workbook.LoadFromStream(stream);

//根据需求获取所需要的sheet

Worksheet sheet = workbook.Worksheets[0];

//获取表格的title行

CellRange titleRow = sheet.Rows[0];

//设置标题

titleRow.Text = "HelloWorldExport";

//副标题

CellRange subtitleRow = sheet.Rows[1];

subtitleRow.Columns[0].Text = "公司名称";

int lastRow = companys.Count + 2;

int lastColumns = days + 1;

CellRange sumRow = sheet.Rows[lastRow];

sumRow.Columns[0].Text = "总和";

string sumFormula= string.Empty;

//数据的最后一行

CellRange valueLastRow = sheet.Rows[lastRow - 1];

//数据的第一行

CellRange valueFirstRow = sheet.Rows[2];

Random myRandom = new Random();

for (int i = 0; i < companys.Count; i++)

{

//获取需要填写值得行

CellRange valueRow = sheet.Rows[i + 2];

//设置文本

valueRow.Columns[0].Text = companys[i].CompanyName;

for (int j = 1; j <= days; j++)

{

subtitleRow.Columns[j].Text = string.Format("{0}天", j);

valueRow.Columns[j].Value = string.Format("{0}", myRandom.Next(1, 500000));

}

}

根据数据源创建生成Excel内容,有不懂得可以看代码注释。这是遇到一个问题,总计的怎么算?如何获取到上面的具体坐标?于是查阅了官网文档,得知在代码里面配置Formula。这时第一个问题解决了。如何获取总计上面的一列所有单元格的具体坐标。这时在官网的没有查阅到,只好用F12进入源码查看,也终于找到了,代码在下:


//valueRow.RangeAddress "‘Sheet1‘!A3:AE3"

//valueFirstRow.RangeAddressLocal A3:AE3

//valueFirstRow.Columns[1].RangeAddressLocal B3;

var firstColumnsLocal = valueFirstRow.Columns[j].RangeAddressLocal;

var lastColumnsLocal = valueLastRow.Columns[j].RangeAddressLocal;

sumFormula = string.Format("=Sum({0}:{1})", firstColumnsLocal, lastColumnsLocal);

subtitleRow.Columns[j].Text = string.Format("{0}天", j);

valueRow.Columns[j].Value = string.Format("{0}", myRandom.Next(1, 500000));

sumRow.Columns[j].Formula = sumFormula;

创建折线图

根据上面的,Excel的数据源也准备好了,下面就来获取数据源来装载图标。


//像excel中插入图形

Chart excelChart = sheet.Charts.Add();

//设置Excel的图形样式

excelChart.ChartType = ExcelChartType.Line;

//Excel折线图的取值范围

excelChart.DataRange = sheet.Range[2, 1, lastRow, lastColumns];

//插入的Excel图标的顶部位置

excelChart.TopRow = lastRow + 2;

workbook.SaveToFile("SpirexmlDemo.xls");

效果图


总结

  1. 这款Spire.xls组件在变量的命名上面比NPOI的命名优化,能够直接根据英文名称得知该变量的作用是什么。
  2. 这款Spire.xls组件在拼写Excel上比较简单。几行代码就可以生成Excel。
  3. 当然这款软件也可以支持其他的图表类型,例如饼图、曲线图、柱状图等等。

结束语

在这里感谢@asxinyu,没有这位的大神之前博客的分析,也就没有这篇博客的诞生,也感谢他对我的指导,让我在遇到问题的时候,多看看官网的帮助文档,谢谢你!也感谢博客园的平台,让每个人都能有接近大神的机会,也祝愿博客园越办越好!2015.05.10 22:00

【版权所有@落叶飞逝的恋博客地址http://www.cnblogs.com/strivelearn/】可以转载,注明出处.

时间: 2024-10-23 07:23:15

一款强大的Office插件,教你如何自动生成Excel图表的相关文章

RTImageAssets插件[email&#160;protected]可自动生成@2x图片

相关链接:https://github.com/rickytan/RTImageAssets RTImageAssets 是一个 Xcode 插件,用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高清图到 @3x 的位置上,然后按 Ctrl+Shift+A 即可自动生成两张低清的补全空位.当然,如果你对图片质量要求不高的话,你也可以从 @2x 的图生成 @3x 版本. 附:Plugin Manager 安装 http://alcatraz.io/

Python数据分析:手把手教你用Pandas生成可视化图表

大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后,pandas的使用变得更加普及,它的身影经常见于市场分析.爬虫.金融分析以及科学计算中. 作为数据分析工具的集大成者,pandas作者曾说,pandas中的可视化功能比plt更加简便和功能强大.实际上,如果是对图表细节有极高要求,那么建议大家使用matplotlib通过底层图表模块进行编码.当然,我

Kalendae——一款功能强大的日历插件

url:http://zjingwen.github.io/SetTimeOutGoBlog/kalendae/index.html (如果打开过慢,或者打不开,原因你懂得.) 一.Kalendae--一款功能强大的日历插件,英文版的,我英文太渣,有没有找到,中文文档.只能自己慢慢翻译,鼓捣了. 二.基本信息 Kalendae支持多种日历样式,可双联.单联.多联,支持单选日期,多选日期.联排选择.跨月选择.而且依赖图片极少,对于使用css来重构UI界面,非常有利. 依赖于了kaledae.js.

10 款强大的JavaScript图表图形插件推荐

转自:http://www.iteye.com/news/24535 网上有很多用于绘制图表图形的免费JavaScript插件和图表库,这类插件大量出现的原因,一是人们不再依赖于Flash,二是浏览器和精密的计算使呈现实时数据变得容易,而且各种向量绘图技术像VML.SVG和Canvas的发展也使之成为可能. 本文推荐10款强大的绘制图表图形的JavaScript插件.其中一些插件需要主流浏览器的支持,而另外一些经过整合后,也能在不同的平台和老版本的浏览器上工作.有些工具是独立的框架,大部分支持常

6款强大的 jQuery 网页布局创建及优化插件

本文将为您介绍6款功能强大的jQuery插件,它们能够帮助您方便快捷地创建复杂的网络布局并进行优化. 1.UI.Layout 该插件可以创建任何你想要的UI形式:包括从简单的标题或侧边栏,到一个包含工具栏,菜单,帮助面板,状态栏,子表格等复杂的应用.     2.jQUery Masonry 动态布局jQuery插件,折叠式CSS浮动面板. 3.jLayout 可提供四种网页元素布局算法.     4.jQuery pageSlide 该插件灵感来自于Aza Raskin的UI工作中.他最近发表

Viewer 是一款强大的 jQuery 图像浏览插件。

Viewer 是一款强大的 jQuery 图像浏览插件. 主要功能: 支持选项 支持方法 支持事件 支持触摸 支持移动 支持缩放 支持旋转 支持键盘 跨浏览器支持 链接: viewer的官方演示,及github上的开源代码. 使用方法: 1.引入css和js <link rel="stylesheet" href="css/viewer.min.css"> <script src="js/viewer.min.js">&l

八款强大的jQuery图片滑块动画插件

jQuery是一款相当轻巧的JavaScript框架,目前几乎每一个WEB项目都在使用jQuery,因为jQuery插件实在太丰富,尤其是 一些图片滑块插件和jQuery焦点图插件,更是多如牛毛,很多初学者只需稍微修改就可以使用.本文精选了8款比较强大的jQuery图片滑块动画插件, 希望对读者有所帮助. 1.jQuery可自动播放动画的焦点图插件 这是一款基于jQuery的可自动播放动画的焦点图插件,各种元素悬浮在图片上,并且可以随意组合播放动画,非常适合一些产品的展示和宣传. 在线演示源码下

分享一款强大的图片查看器插件,手机PC 通吃,功能超级齐全!

一款强大的图片查看器插件,手机PC 通吃,功能超级齐全! 地址:http://photoswipe.com/

12 个强大的 Chrome 插件扩展

Chrome功能强大,也得益于其拥有丰富的扩展资源库.Chrome Web Store里有各种各样的插件,可以满足你使用Chrome时的各种要求.和Firefox一样,Chrome的扩展非常容易安装,而且非常容易卸载.与 Firefox不同,Chrome的扩展不需要重新启动,并且不会有扩展插件会减小你的网页面积.在这里我总结出2013年 Chrome 的12款非常强大的扩展程序,供大家挑选分享.这些插件能不同程度地提升效率.诸如Turn off the light这些非常常用的我就不介绍了. 所