NPOI 在新版本中增长了对图表的有限支持(仅 xlsx 文件)git
项目地址: https://github.com/tonyqus/npoigithub
支持折线图和散点图blog
来看 demo :string
const int NUM_OF_ROWS = 3; const int NUM_OF_COLUMNS = 10; static void CreateChart(IDrawing drawing, ISheet sheet, IClientAnchor anchor, string serie1, string serie2) { var chart = drawing.CreateChart(anchor) as XSSFChart; //生成图例 var legend = chart.GetOrCreateLegend(); //图例位置 legend.Position = LegendPosition.TopRight; //图表 var data = chart.ChartDataFactory.CreateLineChartData<double, double>(); //折线图 //var data = chart.ChartDataFactory.CreateScatterChartData<double, double>(); //散点图 // X轴. var bottomAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom); bottomAxis.IsVisible = false; //默认为true 不显示 设置为fase 显示坐标轴(BUG?) //Y轴 IValueAxis leftAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left); leftAxis.Crosses = (AxisCrosses.AutoZero); leftAxis.IsVisible = false; //设置显示坐标轴 //数据源 IChartDataSource<double> xs = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1)); IChartDataSource<double> ys1 = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, NUM_OF_COLUMNS - 1)); IChartDataSource<double> ys2 = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(2, 2, 0, NUM_OF_COLUMNS - 1)); //数据系列 var s1 = data.AddSeries(xs, ys1); s1.SetTitle(serie1); var s2 = data.AddSeries(xs, ys2); s2.SetTitle(serie2); chart.Plot(data, bottomAxis, leftAxis); } static void Main(string[] args) { IWorkbook wb = new XSSFWorkbook(); ISheet sheet = wb.CreateSheet("linechart"); // Create a row and put some cells in it. Rows are 0 based. IRow row; ICell cell; for (int rowIndex = 0; rowIndex < NUM_OF_ROWS; rowIndex++) { row = sheet.CreateRow((short)rowIndex); for (int colIndex = 0; colIndex < NUM_OF_COLUMNS; colIndex++) { cell = row.CreateCell((short)colIndex); cell.SetCellValue(colIndex * (rowIndex + 1)); } } IDrawing drawing = sheet.CreateDrawingPatriarch(); //锚点 IClientAnchor anchor1 = drawing.CreateAnchor(0, 0, 0, 0, 0, 5, 10, 15); CreateChart(drawing, sheet, anchor1, "title1","title2"); IClientAnchor anchor2 = drawing.CreateAnchor(0, 0, 0, 0, 0, 20, 10, 35); CreateChart(drawing, sheet, anchor2, "s1", "s2"); using (FileStream fs =File.Create("test.xlsx")) { wb.Write(fs); } }
不少特性都还不支持,这是比较难受的.将就用吧it