zoukankan      html  css  js  c++  java
  • Excel生成报表之解决方案合并图表

    首先看下生成的效果图(即使没有安装Excel也能生成这样的图表)。

    其中这个图表中系列有柱状图也有线形图,如何能快速简单生成这样合并图表呢?

    下面来看下为生成这样图表要编写的代码:

      1 /// <summary>
      2 ///这个类型描述如何生成合并的图表。
      3 /// </summary>
      4 public void CreateCombinationChart()
      5 {
      6    //创建一个工作薄对象。
      7    IWorkbook workbook = ExcelxApplication.CreateWorkbook();
      8    //获取工作表集合中指定索引的工作表对象。
      9    IWorksheet worksheet = workbook.Worksheets[0];
     10 
     11    //创建DataTable对象。
     12    DataTable dt = new DataTable();
     13    //向DataTable对象中添加列对象。
     14    dt.Columns.Add("Employee Name");
     15    dt.Columns.Add("Salary", typeof(int));
     16    dt.Columns.Add("Other", typeof(int));
     17    dt.Columns.Add("Total", typeof(int));
     18 
     19    //为DataTable对象添加多行。
     20    dt.Rows.Add(new object[4] { "Nelson", 40000, 20000, 60000 });
     21    dt.Rows.Add(new object[4] { "Young", 55500, 25000,  80500});
     22    dt.Rows.Add(new object[4] { "Lambert", 25000, 10000, 35000 });
     23    dt.Rows.Add(new object[4] { "Johnson", 25050, 12000,  37050});
     24    dt.Rows.Add(new object[4] { "Lee", 45332, 23000, 68332 });
     25 
     26     //导入该DataTable对象的数据到工作表对象中指定的位置。
     27     worksheet.ImportDataTable(dt, true, "A1");
     28 
     29     //获取工作表中所有图表对象。
     30     IChartCollection charts = worksheet.Charts;
     31 
     32     //获取新添加的图表对象(其中指定要添加的图表类型和在工作表中的位置范围)。
     33     IChart chart = charts.Add(ChartType.ColumnStacked100, 0, 4, 17, 12);
     34 
     35     //创建指定的单元格区域。
     36     IRange range = worksheet.Cells.CreateRange("A1:D6");
     37 
     38     //为新创建的图表设置数据源。
     39     chart.SetSourceData(range, RowCol.Columns);            
     40 
     41     //获取图表的区域(包含图表的标题,图例等)。
     42     IChartArea chartAea = chart.ChartArea;
     43     //设置该图表区域的字体名称。
     44     chartAea.Font.Name = "Verdana";
     45     //设置该图表区域的字体大小。
     46     chartAea.Font.Size = 11;
     47 
     48     //获取图表实际的占用的区域。
     49     IPlotArea plotArea = chart.PlotArea;
     50     //隐藏该区域的边框线。
     51     plotArea.Border.Visible = false;
     52     //设置该区域无填充。
     53     plotArea.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.None;
     54 
     55     //获取图表的标题。
     56     IChartTitle title = chart.ChartTitle;
     57     //设置图表标题显示文本。
     58     title.Text = "Employee Salary";
     59     //设置图表标题的字体是否为粗体。
     60     title.Font.Bold = true;
     61     //设置图表标题的字体大小。
     62     title.Font.Size = 12;
     63 
     64     //获取图表的图例对象。
     65     ILegend legend = chart.Legend;
     66     //设置该图例对象的位置。
     67     legend.Position = LegendPositionType.Top;
     68     //隐藏该图例的边框线。
     69     legend.Border.Visible = false;
     70 
     71      //获取图表的Y坐标轴。
     72      IValueAxis valueAxis = chart.ValueAxis;
     73      //隐藏图表Y坐标轴的网格线。
     74      valueAxis.MajorGridlines.Visible = false;
     75      //设置图表Y坐标轴的主要刻度位置。
     76      valueAxis.MajorTickMark = TickMarkType.Outside;
     77 
     78      //获取图表的第二Y坐标轴。
     79      valueAxis = chart.SecondValueAxis;
     80      //设置图表第二Y坐标轴的主要刻度位置。
     81      valueAxis.MajorTickMark = TickMarkType.Outside;
     82 
     83      //获取该图表所有系列对象。
     84      ISeriesCollection seriesCollection = chart.SeriesCollection;
     85      //获取集合中指定索引处的系列对象。
     86      ISeries series = seriesCollection[0];
     87      //设置该系列对象的填充前景色。
     88      series.Area.ForegroundColor = System.Drawing.Color.Orange;
     89 
     90      //获取集合中指定索引处的系列对象。
     91      series = seriesCollection[1];
     92      //设置该系列对象的填充前景色。
     93      series.Area.ForegroundColor = System.Drawing.Color.Red;
     94 
     95      //获取集合中指定索引处的系列对象。
     96      series = seriesCollection[2];
     97      //设置该系列的类型。
     98      series.Type = ChartType.Line;
     99      //将该系列平铺在第二Y坐标轴。
    100      series.PlotOnSecondAxis = true;
    101      //设置该系列的边框样式。
    102      series.Border.Color = System.Drawing.Color.Yellow;
    103      series.Border.Weight = Acey.ExcelX.Drawing.WeightType.WideLine;
    104 
    105      //获取该系列对象的标记。
    106      IDataLabels dataLabels = series.DataLabels;
    107      //表明是否显示值在该标记中。
    108      dataLabels.ShowValue = true;
    109      //设置该标记显示。
    110      dataLabels.Border.Visible = true;
    111      //设置该标记的填充为自动方式。
    112      dataLabels.Area.Formatting = Acey.ExcelX.Drawing.FormattingType.Automatic;
    113      //设置该标记在系列中显示的位置。
    114      dataLabels.Position = LabelPositionType.Center;
    115 
    116      //为该工作薄保存指定的文件格式。
    117      workbook.SaveAs(@"D:\book.xls", FileFormat.Excel97To2003);
    118  }

    只要不多的代码就能轻松高效地生成这样复杂的合并图表。

    三、总结

    无需安装微软Excel,用代码也能很轻松实现单元格格式效果。 下载最新版本到www.aceyoffice.com。如果您想对Acey.ExcelX有进一步了解,在网站下载帮助和Demo。

  • 相关阅读:
    201871010135
    201871010135-张玉晶 实验三 结对项目——《D{0-1}KP 实例数据集算法实验平台》项目报告
    201871010135-张玉晶 实验二 个人项目——《背包问题{0-1}》项目报告
    201871010135-张玉晶 实验一 软件工程准备 ——软件工程及markdown编辑器的初步认识
    张玉晶 201871010135《面向对象程序设计(java)》课程学习总结
    201871010135 张玉晶 《面向对象程序设计(java)》第十七周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十六周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十五周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十四周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十三周学习总结
  • 原文地址:https://www.cnblogs.com/happyfish78/p/2747606.html
Copyright © 2011-2022 走看看