VFP控制Excel插入图表

原创 2012年04月05日 07:53:11

先提示一下,利用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)


 

Codejock ChartPro vfp 使用示例

  • 2014年06月05日 14:34
  • 9KB
  • 下载

VFP控制Excel插入图表

先提示一下,利用Excel的宏录制,看看Excel怎么控制自己,是学习编程控制Excel的非常有效、简便办法。   言归正传。 Excel的图有两种:Chart和ChartObject。 如下...
  • powerwolf
  • powerwolf
  • 2012年04月05日 07:53
  • 2246

excel C# 报表制作汇总

1. 单击“添加引用”对话框的“COM”选项卡,找到“Microsoft Excel 11 Object Library”,按“确定”。 注意:Microsoft Excel 11 Object L...
  • zzy7075
  • zzy7075
  • 2016年08月03日 10:23
  • 1114

VFP全面控制EXCEL

VFP全面控制EXCEL     VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。比如我们可以利用VFP进行处理数据,而利用Excel的预览打...
  • liubangwei
  • liubangwei
  • 2006年07月12日 17:00
  • 647

用VFP控制EXCEL

VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。这就需要我们在V...
  • chuiyanjie
  • chuiyanjie
  • 2006年03月31日 14:53
  • 693

excel C# 报表制作汇总

1. 单击“添加引用”对话框的“COM”选项卡,找到“Microsoft Excel 11 Object Library”,按“确定”。注意:Microsoft Excel 11 Object Lib...
  • aaaaatiger
  • aaaaatiger
  • 2009年10月02日 12:56
  • 4740

Excel图表实战技巧精粹

  • 2013年01月04日 17:01
  • 76.94MB
  • 下载

VFP控制Excel排序

很多朋友在试图用VFP控制Excel都有过无从着手困惑,不知道该去调用哪些过程、方法、函数。 其实进入Excel后,如果我们按Alt-F11,打开Excel自带的Visual Basic编辑器,然后...
  • powerwolf
  • powerwolf
  • 2012年02月09日 17:00
  • 1553

怎样用vfp命令替换excel的表里的单元格?

请教大师:今天遇到一个自己无法解决的问题,就是不知道如何用vfp命令替换excel的表里的单元格的内容,用vfp命令修改excel的表里的单元格的内容。有谁可以给我指点一下呢?先谢谢大家了!...
  • u012298493
  • u012298493
  • 2013年09月30日 13:05
  • 398

[excel2010应用大全].ExcelHome.扫描版.pdf

  • 2013年08月17日 09:21
  • 395.27MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VFP控制Excel插入图表
举报原因:
原因补充:

(最多只允许输入30个字)