操作Excel 来绘制曲线,调用了Epplus动态库来完成

 public void AddChart(ExcelPackage package)
        {
                       ExcelPackage packages = new ExcelPackage();
                  ExcelWorksheet worksheet = null;
                  ExcelChartSerie chartSerie = null;
                  ExcelLineChart chart = null;


                  if (package.Workbook.Worksheets.Count > 0)
                  {
                      #region  充电能量 容量  曲线
                      foreach (var wSheet in package.Workbook.Worksheets)
                      {
                          #region research
                          //不用绘制时间曲线图
                          if (wSheet.Name == "CD_Capacity_Data(Ah)" || wSheet.Name == "CD_Energy_Data(Wh)")
                          {

                              if (wSheet.Name == "CD_Capacity_Data(Ah)")
                              {

                                  worksheet = packages.Workbook.Worksheets.Add("Charge_Capacity Plot");
                              }
                              else if (wSheet.Name == "CD_Energy_Data(Wh)")
                              {
                                  worksheet = packages.Workbook.Worksheets.Add("Charge_Energy Plot");
                              }

                              chart = worksheet.Drawings.AddChart("ColumnStackedChart", eChartType.LineMarkers) as ExcelLineChart;//设置图表样式
                              chart.Legend.Position = eLegendPosition.Right;
                              chart.Legend.Add();
                              chart.Title.Text = worksheet.Name;//设置图表的名称
                              //chart.SetPosition(200, 50);//设置图表位置
                              chart.SetSize(900, 600);//设置图表大小
                              chart.ShowHiddenData = true;

                              if (worksheet.Name == "Charge_Capacity Plot")
                              {

                                  chart.YAxis.Title.Text = "Charge_Capacity";
                              }
                              else
                              {
                                  chart.YAxis.Title.Text = "Charge_Energy";

                              }

                              chart.XAxis.MinorUnit = 1;//设置X轴的最小刻度
                              chart.XAxis.Title.Text = "Cycle_No";
                              //  chart.YAxis.MinorUnit = 1;

                              //chart.DataLabel.ShowCategory = true;
                              chart.DataLabel.ShowPercent = true;//显示百分比

                              int rows = wSheet.Dimension.End.Row;  //获取sheet页的行数
                              int cols = wSheet.Dimension.End.Column;//获取sheet页的列数

                              //  行在前  列在后

                              for (int col = 2; col <= cols; col++)
                              {
                                  if (col % 2 == 0)
                                  {
                                      ExcelRangeBase y = wSheet.Cells[3, col, rows, col];

                                      ExcelRangeBase x = wSheet.Cells[3, 1, rows, 1];

                                      // chartSerie = chart.Series.Add(wSheet.Cells[row + 2, col , row + 2, col], wSheet.Cells[row + 2, 1, row + 2, 1]);

                                      chartSerie = chart.Series.Add(wSheet.Cells[string.Format("{0}:{1}", y.Address, y.Address)], wSheet.Cells[string.Format("{0}:{1}", x.Address, x.Address)]);

                                      ExcelRangeBase yy = wSheet.Cells[1, col, 1, col];

                                      chartSerie.HeaderAddress = wSheet.Cells[string.Format("{0}:{1}", yy.Address, yy.Address)];  //设置每条线的名称
                                  }
                              }
                              chart.SetPosition(0, 10, 0, 20);
                          #endregion research
                          }
                      }
                      #endregion

                      #region 放电能量 容量  曲线
                      foreach (var wSheet in package.Workbook.Worksheets)
                      {
                          #region research
                          //不用绘制时间曲线图
                          if (wSheet.Name == "CD_Capacity_Data(Ah)" || wSheet.Name == "CD_Energy_Data(Wh)" )
                          {
                              if (wSheet.Name == "CD_Capacity_Data(Ah)")
                              {

                                  worksheet = packages.Workbook.Worksheets.Add("Discharge_Capacity Plot");
                              }
                              else if (wSheet.Name == "CD_Energy_Data(Wh)")
                              {
                                  worksheet = packages.Workbook.Worksheets.Add("Discharge_Energy Plot");
                              }

                              chart = worksheet.Drawings.AddChart("ColumnStackedChart", eChartType.LineMarkers) as ExcelLineChart;//设置图表样式
                              chart.Legend.Position = eLegendPosition.Right;
                              chart.Legend.Add();
                              chart.Title.Text = worksheet.Name;//设置图表的名称
                              chart.SetSize(900, 600);//设置图表大小
                              chart.ShowHiddenData = true;
                              //  chart.YAxis.MinorUnit = 1;

                              if (worksheet.Name == "Discharge_Capacity Plot")
                              {

                                  chart.YAxis.Title.Text = "Discharge_Capacity";
                              }
                              else
                              {
                                  chart.YAxis.Title.Text = "Discharge_Energy";

                              }

                              chart.XAxis.MinorUnit = 1;//设置X轴的最小刻度
                              chart.XAxis.Title.Text = "Cycle_No";

                              //chart.DataLabel.ShowCategory = true;
                              chart.DataLabel.ShowPercent = true;//显示百分比

                              int rows = wSheet.Dimension.End.Row;  //获取sheet页的行数
                              int cols = wSheet.Dimension.End.Column;//获取sheet页的列数

                              //  行在前  列在后

                              for (int col = 3; col <= cols; col++)
                              {
                                  if (col % 2 != 0)
                                  {
                                      ExcelRangeBase y = wSheet.Cells[3, col, rows, col];

                                      ExcelRangeBase x = wSheet.Cells[3, 1, rows, 1];

                                      chartSerie = chart.Series.Add(wSheet.Cells[string.Format("{0}:{1}", y.Address, y.Address)], wSheet.Cells[string.Format("{0}:{1}", x.Address, x.Address)]);

                                      ExcelRangeBase yy = wSheet.Cells[1, col - 1, 1, col - 1];

                                      chartSerie.HeaderAddress = wSheet.Cells[string.Format("{0}:{1}", yy.Address, yy.Address)];  //设置每条线的名称
                                  }
                              }
                              chart.SetPosition(0, 10, 0, 20);
                          #endregion research
                          }
                      }
                      #endregion

                      #region 放电 能量 容量 比例  曲线

                      foreach (var wSheet in package.Workbook.Worksheets)
                      {
                          #region research
                          //不用绘制时间曲线图
                          if (wSheet.Name == "Capacity_Retention_Data(%)" || wSheet.Name == "CD_Energy_Retention_Data(%)")
                          {
                              if (wSheet.Name == "Capacity_Retention_Data(%)")
                              {

                                  worksheet = packages.Workbook.Worksheets.Add("Capacity_Retention_Data Plot");
                              }
                              else if (wSheet.Name == "CD_Energy_Retention_Data(%)")
                              {
                                  worksheet = packages.Workbook.Worksheets.Add("CD_Energy_Retention_Data Plot");
                              }

                              chart = worksheet.Drawings.AddChart("ColumnStackedChart", eChartType.LineMarkers) as ExcelLineChart;//设置图表样式
                              chart.Legend.Position = eLegendPosition.Right;
                              chart.Legend.Add();
                              chart.Title.Text = worksheet.Name;//设置图表的名称
                              chart.SetSize(900, 600);//设置图表大小
                              chart.ShowHiddenData = true;
                              //  chart.YAxis.MinorUnit = 1;
                              if (worksheet.Name == "Capacity_Retention_Data Plot")
                              {

                                  chart.YAxis.Title.Text = "Capacity_Retention";
                              }
                              else
                              {
                                  chart.YAxis.Title.Text = "CD_Energy_Retention";
                              
                              }

                              chart.XAxis.MinorUnit = 1;//设置X轴的最小刻度
                              chart.XAxis.Title.Text = "Cycle_No";
                              //chart.DataLabel.ShowCategory = true;
                              chart.DataLabel.ShowPercent = true;//显示百分比

                              int rows = wSheet.Dimension.End.Row;  //获取sheet页的行数
                              int cols = wSheet.Dimension.End.Column;//获取sheet页的列数

                              //  行在前  列在后

                              for (int col = 2; col <= cols; col++)
                              {

                                  ExcelRangeBase y = wSheet.Cells[3, col, rows, col];

                                  ExcelRangeBase x = wSheet.Cells[3, 1, rows, 1];

                                  chartSerie = chart.Series.Add(wSheet.Cells[string.Format("{0}:{1}", y.Address, y.Address)], wSheet.Cells[string.Format("{0}:{1}", x.Address, x.Address)]);

                                  ExcelRangeBase yy = wSheet.Cells[1, col, 1, col];

                                  chartSerie.HeaderAddress = wSheet.Cells[string.Format("{0}:{1}", yy.Address, yy.Address)];  //设置每条线的名称
                              }
                              chart.SetPosition(0, 10, 0, 20);
                          #endregion research
                          }
                      }
                      #endregion

                   

                  }
                  foreach (var obj in packages.Workbook.Worksheets)
                  {
                  package.Workbook.Worksheets.Add(obj.Name,obj);
                   }
            

                  
               //   package.Save();//保存文件
              
        }

Barcode418419
Cycle_No.ChargeDischargeChargeDischarge
1131211
2141111
3141121
4141111
5141211
6141122
7141121
8141111
9141111
101012
11  21
12  11
13  11
14  11
15  21
16  11
17  11
18  21
19  11
20  11
21  11


 

 

 

 

 

 

 

 

 

 

Epplus 简介:Epplus是一个使用Open Office XML(Xlsx)文件格式,能读写Excel 2007/2010文件的开源组件 功效:支持对excel文档的汇入汇出,图表(excel自带的图表基本都可以实现)的列印 使用:首先应该下载Epplus的dll文件 1> 添加dll文件至工程bin文件中 2>在程式中添加引用 using OfficeOpenXml; using OfficeOpenXml.Drawing; using OfficeOpenXml.Drawing.Chart; using OfficeOpenXml.Style; 3>所有的操作语句需要放置在下面的using中 using (ExcelPackage package = new ExcelPackage()) { } 4.添加新的sheet var worksheet = package.Workbook.Worksheets.Add(“sheet1"); 5.单元格赋值,这里多说一句,NPOI必须先创建单元格,然后再给单元格赋值,而Epplus不需要,直接找到单元格进行赋值就可以了. worksheet.Cells[int row, int col].Value = “”; 或者 worksheet.Cells["A1"].Value = “”; 6.合并单元格 worksheet.Cells[int fromRow, fromCol, int toRow,int toCol].Merge = true; 7.获取某一个区域 var rangeData= worksheet.Cells[fromRow, fromCol, toRow, toCol]; 8.设置字体 worksheet.Cells.Style.Font.Name= “正楷”; worksheet.Cells.Style.Font.Color worksheet.Cells.Style.Font.Size 9.设置边框的属性 worksheet.Cells.Style.Border.Left.Style= ExcelBorderStyle.Thin ; worksheet.Cells.Style.Border.Right.Style= ExcelBorderStyle.Thin; worksheet.Cells.Style.Border.Top.Style= ExcelBorderStyle.Thin; worksheet.Cells.Style.Border.Bottom.Style= ExcelBorderStyle.Thin; 10.对齐方式 worksheet.Cells.Style.HorizontalAlignment=ExcelHorizontalAlignment.Center; worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Bottom; 11. 设置整个sheet的背景色 worksheet.Cells.Style.Fill.PatternType= ExcelFillStyle.Solid; worksheet.Cells.Style.Fill.BackgroundColor.SetColor(Color.LightBlue); 12.折行显示 worksheet.Cells.Style.WrapText= true; 13.单元格自动适应大小 worksheet.Cells.Style.ShrinkToFit= true; 14.格式化单元格value值 worksheet.Cells.Style.Numberformat.Format= "0.00"; 15.锁定 worksheet.Cells["A1"].Style.Locked= true; 注:此处锁定某一个单元格的时候,只有在整个sheet被锁定的情况下才可以被锁定,不然加上锁定属性也是不起作用的~~ 二.Epplus另一个出色的地方就是支持图表的列印.功能的實現很簡單,難點在于需求比較細的點上,epplus可能不好實現,但是總的來說是比較好的一個列印圖表的工具 1.简单介绍一下可以实现的图表类型: 直條圖、折綫圖、圓形圖、橫條圖、散佈圖、區域圖 等類型的圖表 2.使用:分为三步, 第一步是将需要显示在图表中的 数据列印到excel中. 第二步是创建所需要的图表类型(折线图为例) var chart = (worksheet.Drawings.AddChart("LineChart", eChartType.Line) as ExcelLineChart); 第三步为图表添加第一步列印的数据区间就可以了 chart.Series.Add(Y軸顯示的數據源,X軸顯示的數據源) 3.图表的功能就这样实现了,很简单吧
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值