• Excel生成报表之解决方案开盘盘高盘低收盘图(附源码)


    下载地址:https://files.cnblogs.com/happyfish78/StockHighLowClose.zip

    首先还是来看下用代码生成的效果图。

    要生成这样效果的图表,如何来实现,先来了解微软Excel中生成这样的图表,需要哪些步骤。

    一、微软Excel中图表生成

    1.首先需要在单元格中填写图表数据源所需要数据。如上图中单元格数据Weekday,Mon,Tue等。

    2.填写完数据后,点击Excel工具栏中图表按钮。

    3.点击图表按钮后,会弹出图表导向的窗口,选择你需要生成的图表类型。

    选择开盘-盘高-盘低-收盘图。

    4.然后点击下一步, 并设置图表指定数据源并选择生成的系列是按行还是按列。

    5.修改图表的标题文本和纵坐标标题文本,并隐藏图例。

    二、用Acey.ExcelX组件实现

    首先需要导入名称空间。

    using System.Data;

    using Acey.ExcelX;

    using Acey.ExcelX.Charts;

    View Code
     1        /// <summary>
     2        /// 这个例子描述如何创建盘高-盘低-收盘图。
     3      /// </summary>
     4         public void CreateStockChart()
     5         {
     6             //创建工作薄对象。
     7             IWorkbook workbook = ExcelxApplication.CreateWorkbook();
     8 
     9             //获取工作薄对象中指定索引处工作表对象。
    10             IWorksheet worksheet = workbook.Worksheets[0];
    11 
    12             //Creates a DataTable object.
    13             DataTable dt = new DataTable();
    14             //添加列该DataTable对象中。
    15             dt.Columns.Add("Weekday");
    16             dt.Columns.Add("Aniseed Syrup", typeof(int));
    17             dt.Columns.Add("Carnarvon Tigers", typeof(int));
    18             dt.Columns.Add("Tofu", typeof(int));
    19 
    20             //添加行该DataTable对象中。
    21             dt.Rows.Add(new object[] { "Mon", 13, 38, 18 });
    22             dt.Rows.Add(new object[] { "Tue", 12, 36, 17 });
    23             dt.Rows.Add(new object[] { "Wed", 14, 39, 16 });
    24             dt.Rows.Add(new object[] { "Thu", 12, 37, 17 });
    25             dt.Rows.Add(new object[] { "Fri", 13, 36, 18 });
    26 
    27             //导入DataTable对象数据到工作表指定的开始位置。
    28             worksheet.ImportDataTable(dt, true, "A1");
    29 
    30             //添加指定类型的图表到指定单元格区域并返回该新添加的图表对象。
    31             IChart chart = worksheet.Charts.Add(ChartType.StockHighLowClose, 0, 4, 18, 13);
    32 
    33             //获取工作表指定范围的单元格区域。
    34             IRange range = worksheet.Cells.CreateRange("A1:D6");
    35             //为该图表对象设置数据源。
    36             chart.SetSourceData(range, RowCol.Columns);
    37 
    38             //设置图表中图例隐藏。
    39             chart.HasLegend = false;
    40 
    41             //获取该图表对象的标题。
    42             IChartTitle title = chart.ChartTitle;
    43             //设置该图表对象标题的值。
    44             title.Text = "Weekday Product Price";
    45 
    46             //获取该图表的Y坐标轴。
    47             IValueAxis valueAxis = chart.ValueAxis;
    48             //设置该图表的Y坐标轴的标题值。
    49             valueAxis.Title.Text = "Units In Stock";
    50 
    51             //保存该工作薄为指定类型。
    52             string xlsFile = @"d:\StockChart.xls";
    53             workbook.SaveAs(xlsFile, FileFormat.Excel97To2003);
    54             Process.Start("Explorer", "/select," + xlsFile); Process.Start(xlsFile);
    55         }

    三、比较微软Excel生成图表和用Acey.ExcelX的实现。

    1.设置数据源

    微软Excel:需要手工填写数据源的每个单元格。

    Acey.ExcelX:worksheet.ImportDataTable(dt, true, "A1");(其中"A1"指定要导入在工作表中的指定开始位置),能很轻松将其二维数据的数据导入到工作表中,减小了填写单元格数据的工作量。

    在上篇文章http://www.cnblogs.com/happyfish78/archive/2012/11/02/2750687.html中我们例举的例子只需要初始化一个二维数据,用方法worksheet.ImportArray(objArray, 0, 0)导入数组数据到工作表中,也能很轻松实现数据导入。

    目前:数据导入已支持:数组、DataTable,DataView,DataRow和DataColumn,具体要用到哪种类型的对象,要看具体的业务、使用场景和用户的使用习惯等。

    2.选择要生成的图表类型

    微软Excel:需要选择图表类型。

    Acey.ExcelX:IChart chart = worksheet.Charts.Add(ChartType.StockHighLowClose, 0, 4, 18, 13);

                                                                                           其中ChartType.StockHighLowClose:表明要生成的图表是开盘-盘高-盘低-收盘图;

                                                                                              参数0代表图表在工作表中左上角的行索引位置,4代表图表在工作表中左上角的列索引位置,

                                                                                             18代表图表在工作表中右下角的行索引位置,13代表图表在工作表中右下角的列索引位置)

    就能很轻松将要生成的图表控制在指定的单元格范围中。返回值Chart对象,方便可以直接修改图表的其他属性。

     chart.HasLegend = false;将图表中图例隐藏。

    3.数据源设置

    微软Excel:首先要需要选择数据源单元格范围,再选择系列按行还是按列生成。

    Acey.ExcelX:通过创建单元格范围的对象(IRange range = worksheet.Cells.CreateRange("A1:D6");)来创建数据源,再通过设置数据源

    chart.SetSourceData(range, RowCol.Columns);,其中参数range指定数据源单元格范围,RowCol枚举类型(包含Rows和Columns)来控制系列是按行或列来生成。

    RowCol枚举类型能让用户使用更方便。

    4.设置图表和纵坐标的标题

    1.设置图表的标题: IChartTitle title = chart.ChartTitle; 首先获取图表的标题对象,然后修改图表标题的文本值:title.Text = "Weekday Product Price";

    2.设置图表的纵坐标标题:IValueAxis valueAxis = chart.ValueAxis;首先获取图表的纵坐标对象,然后修改图表纵坐标的文本值:valueAxis.Title.Text = "Units In Stock";

    四、总结

    无需安装微软Excel,用代码也能很轻松实现生成各种二维图表和三维图表的效果。 下载最新版本到www.aceyoffice.com。如果您想对Acey.ExcelX有进一步了解,在网站下载帮助和Demo。

  • 相关阅读:
    225. 用队列实现栈
    415. 字符串相加
    rabbitmq的基本使用
    3. 无重复字符的最长子串
    面试题59
    面试题30. 包含min函数的栈
    面试题09. 用两个栈实现队列
    287. 寻找重复数
    1137. 第 N 个泰波那契数
    70. 爬楼梯
  • 原文地址:https://www.cnblogs.com/happyfish78/p/2756325.html
Copyright © 2020-2023  润新知