一 在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();
三 效果