关闭

VFP控制Excel插入图表

标签: excelvba工作编程微软服务器
2034人阅读 评论(0) 收藏 举报

先提示一下,利用Excel的宏录制,看看Excel怎么控制自己,是学习编程控制Excel的非常有效、简便办法。

 

言归正传。

Excel的图有两种:Chart和ChartObject。

如下图:


Chart在Excel里被称为图表工作表,在Excel对象层次里的地位与WorkSheet相当,插入一个Chart,是作为一张工作表插入的。

ChartObject被称为嵌入图表,它代表嵌入在表中的一块图,是插入在表中的一个对象。ChartObject实际上是一个容器类对象,它由其它多个对象共同组成,而且其中一个对象是Chart。

这说明Chart是ChartObject的基类(我这里的基类仅表达构成基础的意思,不是面向对象编程中基于此派生的意思)。

而我们直觉中ChartObject是嵌入在WorkSheet中的,那么ChartObject在对象层次中就应该比WorkSheet低一级。

但实际上ChartObject比WorkSheet的同级对象Chart还高了一级。

这种错觉其实上是编程的时候我们习惯按对象的作用来部署对象的层次造成的。(看样子要改变一下心智模式了。)

 

Chart和ChartObject还有另一层关联,那就是可以通过Chart的Location函数把Chart重新定位到一张工作表(WorkSheet)中,转变成嵌入对象ChartObject。

 

在微软提供的VFP的范例中,两种图表建立样板都有,这里只说ChartObject。

 

习惯上我们手工操作时先选取数据,再建图表。程序控制却恰好相反,是先建立图表,再指定数据源。请看代码:

#include "D:\Documents\Visual FoxPro 项目\微软常量\VBA 宏\Excel Constants.h"

loExcel = GetOBJECT( '','excel.application' )

cSourceFile = 'D:\Documents\Visual FoxPro 项目\test\服务业统计.xls'

loBook = loExcel.workbooks.Open( cSourceFile ) loSheet = loBook.WorkSheets( 1 ) loRange = loSheet.UsedRange    ** 作图在数据区域之外,下列代码用于确定大致作图位置。 lnLeft = 40 lnTop  = loSheet.UsedRange.Height + 4 * loSheet.Rows( 1 ).Height  lnWidth = 600 lnHeight = 480

loChartObject = loSheet.ChartObjects.Add( lnLeft, lnTop, lnWidth, lnHeight ) loChartObject.Chart.Chartwizard( loRange,xlLine,;  && 折线图。         4,xlRows,;    && 以行为系列。         1,;      && 分类标签。         1,;      && 系列标签。         .t.,;     && 显示图例。         '统计图',;    && 图表标题。           ,,) 

loSheet.ChartObjects是WorkSheet的一个函数,当该函数采用带参数的ChartObjects( Index )形式时,返回工作表中单个嵌入图表ChartObject对象。采用不带参数Index形式时,返回代表所有嵌入图表集合的ChartObjects 对象。

Excel里既有ChartObject、ChartObjects对象,又有ChartObjects函数,很容易混淆。请对照VBA帮助或微软的CSDN,仔细体会一下其中的区别。

 

接着我们改变一下Excel默认图表格式,以适应自己的特定情况。然后存盘退出。设想代码如下:

WITH loChartObject.Chart.Axes( xlValue )    && 调整数值轴单位。
     .ScaleType = xlLinear
   *.DisplayUnit = xlMillions
    .HasDisplayUnitLabel = .t.
    .TickLabels.NumberFormat = "#,##0"
ENDWITH 
loBook.Save
loBook.Close
loExcel.Quit
Release loBook, loExcel

我在测试过程中却出了问题,执行完DisplayUnit = xlMillions,存盘的时候就会收到OLE服务器抛出意外的提示。但只要一屏蔽DisplayUnit就什么问题也没有。而且家里和单位的电脑都一样,百思不得其解。大家试试看有没有同样的现象。 

无奈之下改弦易辙,打开Excel的宏录制,手工操作了一遍,然后模仿宏的步骤,把代码改成下面这个样子:

loChartObject.Activate
WITH loExcel.ActiveChart.Axes( xlValue )				&&	调整数值轴单位。
        	.ScaleType = xlLinear
	.DisplayUnit = xlMillions
        	.HasDisplayUnitLabel = .t.
       	.TickLabels.NumberFormat = "#,##0"
ENDWITH
	    
lxlApp.ActiveChart.PlotArea.Interior.ColorIndex = xlColorIndexNone	&&	无背景色。

大功告成。

 

(VFP9.0 + Excel2003)


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25799次
    • 积分:353
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    最新评论