一、思路:   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表格中插入饼状图(可实现动态数据生成)相关推荐

  1. springboot+mybatisplus+thymeleaf导入导出excel表格和制作饼状图,柱状图

    这是我们的项目结构. 我们导入的依赖.  application.yml配置文件. goods实体类 type实体类 1.导出 前端代码: JavaScript代码: 通过这里跳转到后端  导出的工具 ...

  2. NX二次开发 截图、向excel表格中插入图片 UF_DISP_create_framed_image

    简介: NX二次开发 截图.向excel表格中插入图片 UF_DISP_create_framed_image 截图: UF_DISP_create_framed_image 插入图片 int id ...

  3. 【Python】通过xlsxwriter向excel表格中插入图片、本地超链接

    通过python向excel表格中插入图片,且设置图片的本地超链接. 代码亲测可行,python版本为3.6.3 import xlsxwriter# 创建一个新Excel文件并添加一个工作表. wo ...

  4. java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...

    在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...

  5. C# 使用NPOI库导出excel表格

    1.Visual Studio 环境中配置安装NPOI库 右击解决方案选择"管理解决方案的NuGet"程序包 在搜索框中搜索NPOI,如果搜索不到结果,需要点击"设置&q ...

  6. vb 读取oracle中的表格数据,如何将数据库信息读取导出excel表格中-VB 从SQL数据库中把数据导出到Excel表格中,怎么写?...

    VB 从SQL数据库中把数据导出到Excel表格中,怎么写? INSERT INTO OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=&q ...

  7. Word中插入表格与柱状图饼状图技术经验分享

    最近公司一个项目里要求自动生成报告功能,研究了1周多,主要实现方式是通过调用微软Office COM组件来实现操作word文档,生成段落,表格,及各种图表. 本人发现操作word地方也有几个坑人的地方 ...

  8. Python 在 excel 中画 饼状图 折线图

    excel 饼状图绘制 案例1 from openpyxl import Workbook from openpyxl.chart import PieChart, Reference from op ...

  9. AntV中的饼状图重复渲染问题解决

    场景 在使用AntV的饼状图时,在页面加载完之后js中会ajax请求一次后台数据, 有一个时间的选择框,选择时间后点击搜索会再次执行ajax请求一次. 效果如图: 可是最终导致的后果是饼状图重复渲染. ...

最新文章

  1. plotly可视化绘制多图(multiplot)
  2. c语言中描述y是奇数,4章选择结构程序设计C语言入门习题
  3. JDK的环境变量配置
  4. Tomcat、JBOSS、WebSphere、WebLogic、Apache之间的区别
  5. Redis的session管理和Memcached的session管理不同
  6. Spring面试题(第一期)
  7. java数字格式化_Java数字格式
  8. 最全的B端产品经理干货知识(3)
  9. linux中如何新建一个磁盘,如何在Linux操作系统中新建磁盘分区
  10. iPhone 12无线充电模块曝光:AirPower有戏了!
  11. 心情随笔——2012121
  12. 如何简单描述java中的代理模式
  13. tomcat7下载安装
  14. Winamp v5.62
  15. 求解带时间窗的车辆路径问题(matlab实现)
  16. 帮你找影视剧同款的“影觅”宣布完成百万美元级Pre-A轮融资_36氪
  17. 统计学中p值计算公式_统计学中的P值如何计算?
  18. R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行降序排序(DESCENDING)
  19. 【论文学习】基于区块链的档案数据保护和共享方法
  20. opencv学习笔记之像素处理

热门文章

  1. AI吉尼斯:那些你不知道的人工智能之“最”
  2. 深度学习不是AI的未来
  3. 大脑神经细胞也有老熟人
  4. 狂赚 1227 亿!腾讯员工 2020 年人均年薪 81 万;小米员工人均年薪 45 万
  5. 据说,程序员已成为女生年度最喜欢男友职业Top3?
  6. 客户信贷评级 Python 实战
  7. Windows Server Update 失败后,怎么恢复
  8. 迈向智慧化 物联网规模应用不断拓展
  9. 厦门试点医疗大数据 产值有望达1200亿
  10. 【JS基础】类型转换——不同数据类型比较