C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)
一、思路: 1、excel是可以通过NPOI插入图片的;
2、C#通过NPOI生成饼状图;
3、把生成的饼状图以字节流的形式插入到表格
二、看代码:
#region 生成饼图图例/// <summary>/// 生成饼图饼图的颜色随机产生/// </summary>/// <param name="width">图片宽度</param>/// <param name="height">图片高度</param>/// <param name="radius">饼图半径</param>/// <param name="data">数据源</param>/// <param name="legends">图例</param>/// <returns></returns>public static Bitmap GetPieGraphic(int width, int height, int radius, float[] data, string[] legends){if (data != null){string familyName = "Arial";Bitmap objbitmap = new Bitmap(width, height);Graphics objgraphics = Graphics.FromImage(objbitmap);objgraphics.Clear(Color.White);//抗锯齿 objgraphics.SmoothingMode = SmoothingMode.HighQuality;//高质量的文字 objgraphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;//像素均偏移0.5个单位,以消除锯齿 objgraphics.PixelOffsetMode = PixelOffsetMode.Half;//定位饼图绘制的位置Rectangle rect = new Rectangle(width / 2, height / 6, radius, radius);Random random = new Random();float currentdegree = 0.0f;float Total = data.Sum();List<Color> listColor =new List<Color>();for (int i = 0; i < data.Length; i++){Color temC = Color.FromArgb(random.Next(255), random.Next(255), random.Next(255));listColor.Add(temC);SolidBrush brush = new SolidBrush(temC);objgraphics.FillPie(brush, rect, currentdegree, Convert.ToSingle(data[i] / Total * 360));currentdegree += Convert.ToSingle(data[i] / Total * 360);}//放置图例 PointF basePoint = new PointF(10, 20);//色块的大小 SizeF theSize = new SizeF(45, 16);//第一个色块的说明文字的位置 PointF textPoint = new PointF(basePoint.X + 50, basePoint.Y);for (int j = 0; j < listColor.Count; j++){RectangleF baseRectangle = new RectangleF(basePoint, theSize);//画代表色块 objgraphics.FillRectangle(new SolidBrush(listColor[j]), baseRectangle);string temstr = String.Format("{0}%", (data[j] / Total * 100).ToString("#0.00"));objgraphics.DrawString(legends[j] + " " + temstr, new Font(familyName, 11), Brushes.Black, textPoint);basePoint.Y += 30;textPoint.Y += 30;}return objbitmap;}else{return null;}}/// <summary>/// 将BitMap类型的图像数据转换成byte[]/// </summary>/// <param name="bitmap">图像数据</param>/// <returns></returns>public static byte[] Bitmap2Byte(Bitmap bitmap){using (MemoryStream stream = new MemoryStream()){bitmap.Save(stream, ImageFormat.Jpeg);byte[] data = new byte[stream.Length];stream.Seek(0, SeekOrigin.Begin);stream.Read(data, 0, Convert.ToInt32(stream.Length));return data;}}#endregion 生成饼图图例
三、在处理表格数据出插入下面代码:
//legends和data可以是动态数据 String[] legends = {"A满意","B基本满意","C不满意" };float[] data = {1,3,1 };Bitmap bitmap = GetPieGraphic(200,200,100,data,legends);var row101 = sheet.CreateRow(82);row101.Height = 80 * 20;//将图片文件读入一个字符串byte[] bytes = Bitmap2Byte(bitmap);int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();// 插图片的位置 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) 后面再作解释HSSFClientAnchor anchor = new HSSFClientAnchor(100, 100, 0, 0, 1, 82, 6, 94);//把图片插到相应的位置HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
转载于:https://www.cnblogs.com/lijl/p/10718741.html
C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)相关推荐
- springboot+mybatisplus+thymeleaf导入导出excel表格和制作饼状图,柱状图
这是我们的项目结构. 我们导入的依赖. application.yml配置文件. goods实体类 type实体类 1.导出 前端代码: JavaScript代码: 通过这里跳转到后端 导出的工具 ...
- NX二次开发 截图、向excel表格中插入图片 UF_DISP_create_framed_image
简介: NX二次开发 截图.向excel表格中插入图片 UF_DISP_create_framed_image 截图: UF_DISP_create_framed_image 插入图片 int id ...
- 【Python】通过xlsxwriter向excel表格中插入图片、本地超链接
通过python向excel表格中插入图片,且设置图片的本地超链接. 代码亲测可行,python版本为3.6.3 import xlsxwriter# 创建一个新Excel文件并添加一个工作表. wo ...
- java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...
在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...
- C# 使用NPOI库导出excel表格
1.Visual Studio 环境中配置安装NPOI库 右击解决方案选择"管理解决方案的NuGet"程序包 在搜索框中搜索NPOI,如果搜索不到结果,需要点击"设置&q ...
- vb 读取oracle中的表格数据,如何将数据库信息读取导出excel表格中-VB 从SQL数据库中把数据导出到Excel表格中,怎么写?...
VB 从SQL数据库中把数据导出到Excel表格中,怎么写? INSERT INTO OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=&q ...
- Word中插入表格与柱状图饼状图技术经验分享
最近公司一个项目里要求自动生成报告功能,研究了1周多,主要实现方式是通过调用微软Office COM组件来实现操作word文档,生成段落,表格,及各种图表. 本人发现操作word地方也有几个坑人的地方 ...
- Python 在 excel 中画 饼状图 折线图
excel 饼状图绘制 案例1 from openpyxl import Workbook from openpyxl.chart import PieChart, Reference from op ...
- AntV中的饼状图重复渲染问题解决
场景 在使用AntV的饼状图时,在页面加载完之后js中会ajax请求一次后台数据, 有一个时间的选择框,选择时间后点击搜索会再次执行ajax请求一次. 效果如图: 可是最终导致的后果是饼状图重复渲染. ...
最新文章
- plotly可视化绘制多图(multiplot)
- c语言中描述y是奇数,4章选择结构程序设计C语言入门习题
- JDK的环境变量配置
- Tomcat、JBOSS、WebSphere、WebLogic、Apache之间的区别
- Redis的session管理和Memcached的session管理不同
- Spring面试题(第一期)
- java数字格式化_Java数字格式
- 最全的B端产品经理干货知识(3)
- linux中如何新建一个磁盘,如何在Linux操作系统中新建磁盘分区
- iPhone 12无线充电模块曝光:AirPower有戏了!
- 心情随笔——2012121
- 如何简单描述java中的代理模式
- tomcat7下载安装
- Winamp v5.62
- 求解带时间窗的车辆路径问题(matlab实现)
- 帮你找影视剧同款的“影觅”宣布完成百万美元级Pre-A轮融资_36氪
- 统计学中p值计算公式_统计学中的P值如何计算?
- R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行降序排序(DESCENDING)
- 【论文学习】基于区块链的档案数据保护和共享方法
- opencv学习笔记之像素处理