NPOI导出饼图到Excel
NPOI是一个很强大的第三方类库(本身是POI[java类库]改过来的.net版本),其他介绍自己去百度。这篇文章主要是最近有个需求,需要将饼图导入到Excel中,这里提供两种解决方案(其实应该有三种)。
第一种:将图片写入到Excel中
这种方式,需要自己先在代码中生成饼图,然后将图片写入到Excel中。
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Drawing : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int[] data = { 100,200,300,460}; Color[] colors={Color.Green,Color.Blue,Color.Yellow,Color.Tomato}; Bitmap bm = new Bitmap(400,400); Graphics g = Graphics.FromImage(bm); g.Clear(Color.White); g.DrawString("饼图测试",new Font("宋体",16),Brushes.Red,new PointF(5,5)); float totalValue = 0; foreach (int i in data) { totalValue += i; } float sweepAngle = 0; float startAngle = 0; int index=0; float x = 50f; float y = 50f; float width = 200f; foreach (int i in data) { sweepAngle=i/totalValue*360; g.FillPie(new SolidBrush(colors[index++]),x,y,width,width,startAngle,sweepAngle); //g.DrawPie(Pens.Black,x,y,width,width,startAngle,sweepAngle); //加边线代码 startAngle += sweepAngle; } bm.Save(Response.OutputStream,ImageFormat.Jpeg); g.Dispose(); } }
//g.DrawPie(Pens.Black,x,y,width,width,startAngle,sweepAngle);给饼图加边线
第二种:用Excel模板导出
第二种方式需要自己先手动创建一个带Excel文档,里面插入一个图表,定义好数据源,根据传入的数据源,Excel自动生成饼图。
第三种:NPOI本身自带生成图表的类库,是可以自定义生成的,但是APi不好查,这种方法争取后续补上。