VC创建EXCEL图表

EXCEL 中手动能够执行的操作,在 VC 下,都能通过 COM 提供的技术来实现,下面是我在工作中使用智能指针对 EXCEL CHART 操作的一点肤浅的认识。如果对 VC 操作 EXCEL 一点都不了解的话,建议先看看我写的上一篇日志,了解一下 EXCEL 的结构,因为下面很多内容都是基于上一篇文章。

要想生成一张图表,首先要了解图表由哪些元素组成,才能准确的操作这些元素,通过下图来说明:

 

首先,图表的形态是由图表类型和数据决定的,相同的数据不同的类型,会表现出不同样式的图表,例如柱形图、饼图、折线图等等,上图是一个 XY 散点图;相同的类型不同的数据产生不同形状的图表。

以上图为例, XY 散点图主要由图表区、数据系列、坐标轴组成,左侧的 Y 称作做“(主)数值( Y )轴”,右侧的 Y 轴称作“次数值( Y )轴”,同样的 X 轴也分为“(主)数值( X )轴”和“次数值( X )轴”。

在上图中看到两条曲线,表明此图有两个数据系列,数据系列可以被理解为一组相同属性的数据点组成的折线,用 EXCEL 帮助的解释是:每个 数据标志   (数据标记:图表中的条形、面积、圆点、扇面或其他符号,代表源于数据表单元格的单个数据点或值。图表中的相关数据标记构成了数据系列。) 都代表来自于工作表中的一个数字。具有相同样式的数据标志代表一个 数据系列 。一个数据系列通常由标题、数据( X )轴、数据( Y )轴组成。

创建这样一个图标的一般步骤是:

1.        创建一个图表;

2.        创建数据系列,为数据系列选择数据集;

3.        为数据系列选择坐标轴;

4.        设置各个元素的属性,包括标题,颜色,字体,样式等等。

简单的介绍了图表的组成之后,我们来看 VC 的操作。我们假定生成图表的数据来源于名为“ DataSheet ”的工作表。

第一步,创建一个图表。

_ChartPtr pChart = pBook->Charts-> Add ();

pChart-> PutChartType ( xlXYScatterLinesNoMarkers );

和工作表集合一样,在一个工作薄中包含一个图表集合 Charts ,通过图表集合的 Add ()函数插入一个空的图表到工作簿中, pChart 智能指针对象代表新插入的图表,然后设置图标的类型,参数 xlXYScatterLinesNoMarkers 是一个常量,表示“无数据点折线散点图”,更多的图表类型可以查阅 EXCEL 的帮助。

第二步,创建数据系列,为每个数据系列添加数据。

SeriesCollectionPtr pSeriesCollection ;                       // 数据系列集合指针     

SeriesPtr pSeries ;                                                   // 数据系列指针

RangePtr pRange ;                                                   // 数据集合指针

_ WorksheetPtr pSheet ;                                            // 数据工作表指针

pSheet = m_pSheets-> GetItem ("DataSheet");             // 得到数据工作表指针

pSeriesCollection = pChart-> SeriesCollection ();          // 得到数据系列集合指针

pSeries = pSeriesCollection-> NewSeries ();                 // 新建一个数据系列

pRange = pSheet->Range["E2"]["E50"];                     // 得到数据集合

pSeries-> PutValues ((Range*)pRange);                       // 设置数据系列 Y 轴的数据

pRange = pSheet->Range["F2"]["F50"];                     // 得到数据集合

pSeries-> PutXValues ((Range*)pRange);                     // 设置数据系列 X 轴的数据

主要是三个方法的应用,在数据系列集合中创建一个数据系列,设置数据系列的 Y 轴和 X 轴的数据集合。新创建的数据系列默认是(主)数值( Y )和(主)数值( X )轴组成,就像例图中的电流数据系列那样,创建例图中的电压数据系列只需要比在上面的代码中添加一句:

pSeries->AxisGroup = xlSecondary ;                          // 当前数据系列属于次数值轴

第三步,设置各个元素的属性

数据系列 Series 有很多的属性和方法。

1. AxisPtr 表示坐标轴。

AxisPtr pAxis = pChart->Axes( xlCategory , xlPrimary );

pAxis->PutHasTitle(TRUE);                                     // 设置坐标轴的标题可见

pAxis->AxisTitle->PutText(“ 相对时间 ”);                   // 设置坐标轴的标题文本

通过 pChart Axes 获得相应的坐标轴,第一个参数指定返回 X 轴,如果设为 xlValue 则返回 Y 轴;第二个参数表示返回坐标轴组, xlPrimary 表示主坐标轴, xlSecondary 表示返回次坐标轴。

下面代码比较简单,设置网格线的样式:

pAxis->MajorGridlines->Border->LineStyle = xlDot ;

pAxis->MajorGridlines->Border->ColorIndex = 57;

pAxis->MajorGridlines->Border->Weight = xlHairline ;

2. PlotAreaPtr 表示图表区域。

PlotAreaPtr pPA = pChart-> GetPlotArea ();                 // 获得图表区域指针

pPA->Interior->ColorIndex = xlNone ;                        // 图表区域的底色设置为空,即为默认的白色

最后 pChart-> Location ( xlLocationAsNewSheet , "NewChart") 将刚才创建的图表作为一个新的工作表并命名为 NewChart

 

一张还算有点复杂的图表通过上面提到的方法基本可以实现。其他更多的操作,可以通过下面的方式了解如何操作。

开启 EXCEL 的“录制新宏”功能,操作 EXCEL 生成需要的图表,然后停止录制。打开 Visual Basic 编辑器 ,在“模块”中可以看到 VB 代码,在 VC 中可以找到相对应的操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值