C# EPPlus导出EXCEL,并生成Chart表

一  在negut添加EPPlus.dll库文件。

之前有写过直接只用Microsoft.Office.Interop.Excel 导出EXCEL,并生成Chart表,非常耗时,所以找了个EPPlus控件。

二 代码部分

System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("序号", typeof(int));
            dt.Columns.Add("数据1", typeof(int));
            dt.Columns.Add("数据2", typeof(int));
            Random r = new Random();
            for (int i = 0; i < 20; i++)
            {
                if (i == 6 || i == 16) continue;
                dt.Rows.Add(i + 1, r.Next(50), r.Next(60));
            }
            ////新建一个 Excel 文件
            //string filePath = @"C:\Users\Lenovo\Desktop\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
            //FileStream fileStream = new FileStream(filePath, FileMode.Create);

            ////加载这个 Excel 文件
            //ExcelPackage package = new ExcelPackage(fileStream);

            //加载这个 Excel 文件
            ExcelPackage package = new ExcelPackage();

            // 添加一个 sheet 表
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("数据");
            //添加个chart表
            ExcelWorksheet shapesheet = package.Workbook.Worksheets.Add("Chart");
            shapesheet.View.ShowGridLines = false;//去掉sheet的网格线
            shapesheet.Cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
            shapesheet.Cells.Style.Fill.BackgroundColor.SetColor(Color.SkyBlue);

            //worksheet.View.ShowGridLines = false;//去掉sheet的网格线

            #region 生成chart表
            ExcelChartSerie serie = null;
            ExcelChart chart = shapesheet.Drawings.AddChart("chart", eChartType.LineMarkers);
            //chart.Legend.Position = eLegendPosition.TopRight;
            chart.SetPosition(5, 5);
            chart.Legend.Add();
            chart.Title.Text = "测试";
            chart.ShowHiddenData = true;
            chart.SetSize(1000, 600);//设置图表大小

            chart.XAxis.Title.Text = "CNC";
            chart.XAxis.Title.Font.Size = 10;

            chart.YAxis.Title.Text = "Value";
            chart.YAxis.Title.Font.Size = 10;

            #endregion

            int rowIndex = 1;   // 起始行为 1
            int colIndex = 1;   // 起始列为 1

            //设置列名
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                worksheet.Cells[rowIndex, colIndex + i].Value = dt.Columns[i].ColumnName;
                //字体
                worksheet.Cells[rowIndex, colIndex + i].Style.Font.Name = "Arial";
                //字体加粗
                worksheet.Cells[rowIndex, colIndex + i].Style.Font.Bold = true;
                //字体大小
                worksheet.Cells[rowIndex, colIndex + i].Style.Font.Size = 12;
                //自动调整列宽,也可以指定最小宽度和最大宽度
                worksheet.Column(colIndex + i).AutoFit();

                if (colIndex + i > 1)
                {
                    serie = chart.Series.Add(worksheet.Cells[2, colIndex + i, dt.Rows.Count + 1, colIndex + i], worksheet.Cells[2, 1, dt.Rows.Count + 1, 1]);
                    serie.HeaderAddress = worksheet.Cells[1, colIndex + i];
                }
            }

            // 跳过第一列列名
            rowIndex++;

            //写入数据
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    //worksheet.Cells[rowIndex + i, colIndex + j].Style.Numberformat.Format = "0.00";
                    worksheet.Cells[rowIndex + i, colIndex + j].Value = double.Parse(dt.Rows[i][j].ToString());
                }

                //自动调整行高
                worksheet.Row(rowIndex + i).CustomHeight = true;

            }

            //添加chart数据,chart.Series.Add()方法所需参数为:chart.Series.Add(X轴数据区,Y轴数据区)
            //serie = chart.Series.Add(worksheet.Cells[2, 2, dt.Rows.Count + 1, 2], worksheet.Cells[2, 1, dt.Rows.Count + 1, 1]);
            //serie.HeaderAddress = worksheet.Cells[1, 2];
          //chartSerie = chart.Series.Add(worksheet.Cells[row + 1, 2, row + 1, 2 + dataPercent.Columns.Count - 2], worksheet.Cells["B1:M1"]);
          //chartSerie.HeaderAddress = worksheet.Cells[row + 1, 1];//设置每条线的名称

            //垂直居中
            worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
            //水平居中
            worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            //单元格是否自动换行
            worksheet.Cells.Style.WrapText = false;
            //单元格自动适应大小
            worksheet.Cells.Style.ShrinkToFit = true;

            //合并单元格
            //worksheet.Cells[2, 1, 2, 2].Merge = true;
            //worksheet.Cells[int fromRow, fromCol, int toRow,int toCol].Merge = true; 

            //冻结首行(行号,列号)
            worksheet.View.FreezePanes(2, 1);
            ////冻结1-2列
            //worksheet.View.FreezePanes(1, 3);

            //新建一个 Excel 文件
            string filePath = @"C:\Users\Lenovo\Desktop\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
            FileStream fileStream = new FileStream(filePath, FileMode.Create);
            package.SaveAs(fileStream);

            //package.Save();

            fileStream.Close();
            fileStream.Dispose();

            worksheet.Dispose();
            package.Dispose();
            GC.Collect();

三 效果

原文地址:https://www.cnblogs.com/wangyonglai/p/10478576.html

时间: 2024-08-04 12:47:19

C# EPPlus导出EXCEL,并生成Chart表的相关文章

C# NPOI导出Excel和EPPlus导出Excel比较

系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http://npoi.codeplex.com/ EPPlus官网地址:http://epplus.codeplex.com/ 添加NPOI.EPPlus类库dll使用的是NuGet添加. 在类库References右键Manage NuGet Packages...,之后选择添加对应的dll. 测试结果显

EPPLUS 导出excel,包括文本,图片

string[] ids = this.dDataList.SelectedIds;            if (ids.Length != 1)            {                Soyisoft.Web.WebUtil.ShowMessage(this.Page, "请选择一行数据");                return;            } string[] idArr = ids[0].Split('-');            if

C# 使用Epplus导出Excel [2]:导出动态列数据

上一篇导出excel,是导出已知固定列,有时候我们根本就不知道有几列.列名是什么,因此这些动态列,可以用Dictionary<string,string>接收. 1.实体Student上加上一个字段Dictionarys Student.cs public class Student { public String Name { get; set; } public String Code { get; set; } public Dictionary<string, string>

C# 使用Epplus导出Excel [4]:合并指定行

导出的Excel数据,合并指令行并水平垂直居中 原始数据 合并后的数据 代码如下 /// <summary> /// 合并行 /// </summary> /// <param name="sheet"></param> /// <param name="startRowIndex"></param> /// <param name="mergeRowIndexs"&g

选择性导出excel表中内容

package com.huawei.utils; import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Date;import java.util.List;import java.util.Map;

导出Excel之Epplus使用教程3(图表设置)

导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他设置) Epplus的图表实现是很简单的,它支持的图表类型也很多,基本上能满足我们的需求.创建图表分为三步(以柱状图举例): 1.创建图表 ExcelChart chart = worksheet.Drawings.AddChart("chart", eChartType.ColumnCl

C#使用第三方组件Epplus操作Excel表

Epplus操作Excel基础详解 1.什么是Epplus Epplus是一个使用Open Office XML文件格式,能读写Excel2007/2010文件的开源组件,在导出Excel的时候不需要电脑上安装office. 其中,Open Office XML文档格式包括我们常见的xlsx.docx.pptx等,换而言之,我们常见的这些格式的文件都是基于捆绑XML文件的,使用Epplus操作的本质是通过操作XML文件去操作xlsx.XML,是一种可扩展标记语言,在计算机中,标记指计算机能理解的

导出Excel之Epplus使用教程1(基本介绍)

1.前言 目前Epplus的介绍中文资料很少,我也一直在摸索中使用它,以下是我在使用过程中得到的经验,写出来供大家参考.本系列共4章: 导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他设置) 2.Epplus介绍 EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件,在导出

ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)

网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的Excel有三列(姓名.年龄.性别)//列之间用\t隔开StringWriter sw = new StringWriter();sw.WriteLine("姓名\t年龄\t性别"); //Excel表格的列标题 sw.WriteLine("张三\t29\t男"); /