利用VFP制作财务报表——谈VFP与Excel的交互操作

Author: 周鸣扬 Date: 2000年 第4期

  在VFP中制作财务报表(或者是其他报表),通常的方法是利用VFP的报表生成器一步一步地生成,这种方法用起来很麻烦,而且打印出来的报表格式也不能尽如人意。提到制作报表,你可能够马上想到大名鼎鼎的Excel,我们能不能将二者结合起来——利用VFP的数据处理的结果,再使用Excel排版并且打印输出,而且还要让二者结合得天衣无缝呢?答案是肯定的,利用OLE技术,你能够很容易地实现上述想法。
  大家对VFP的CreateObject函数可能不会陌生,利用CreateObject函数,你能够在VFP中创建并使用任何在你计算机上注册了的类(通常在安装应用程序时,应用程序都会向注册表里添加类信息)。也就是说你能够在VFP中调用任何应用程序为你的数据处理服务。CreateObject的具体用法如下:
  CREATEOBJECT(ClassName[eParameter1,eParameter2,...])
  其中,ClassName指明欲建立对象的类名。eParameter1,eParameter2……是用来传递参数给OLE对象的(OLE对象进行初始化时要用要到的)。例如,在VFP中欲建立一Excel工作簿对象,只须在程序中加入下列语句:MySheet=CREATEOBJECT(′Excel.Sheet′)就行了。
  要在VFP中灵活地调用Excel为你服务,首先你应该对Excel提供的各类对象进行深入了解。Excel为我们提供了一百多种对象,如应用程序对象、图表对象、工作簿对象等等。对于每种对象调用,你得遵循一定的规则(也就是说你必须熟悉VBA编程)。接下来介绍Excel常见对象的调用方法。
#1  一、创建Excel对象类
  1.建立Excel对象MyExcel=CREATEOBJECT(′Excel.application′)
  2.建立工作簿对象MyExcel.workbooks.Add
#1  二、文件操作类
  1.引用Excel文件Getobject(″Excel文件名″)
  2.打开文件workbook.open(″文件名″)
  3.保存文件workbook.SaveAs(″文件名″)
  4.打印文件workbook.Printout(″文件名″)
  注意,上面的workbook为当前活动的工作簿。
  实例:假设到了月底,你用计算机对当月的账务资料整理后,得出了当月的损益表,底稿如下(名称为syb.dbf)。
    项 目      本月数 本年累计数
    产品销售收入   98765.4
    产品销售成本   73244.3
    产品销售费用   1878.00
    产品销售税金及附加355
    产品销售利润   ---
    其他业务利润
    管理费用     678
    财务费用     333
    营业利润     ---
    投资收益
    营业外收入    1000
    营业外支出
    利润总额     ---
  由于Excel中自带了损益表模板,因此我们能够很方便地在Excel中创建损益表。在VFP中建立一程序syb.prg,其内容如下(为节约篇幅,程序中略去了输入本年累计数的语句)。
  close all
  use syb
  go top
  *新建一Excel对象
  oleapp=Createobject(″Excel.Application″)
  *让Excel对象可见,如果设为F(不可见),你能够让VFP后台运行Excel,借此可以保持界的一致性。
  oleapp.visible=.t.
  *添加工作簿
  oleapp.workbooks.add
  *打开Excel自带的财务报表模板
  oleapp.workbooks.open(″C:\Program Files\Microsoft Office\Templates\电子表格模板\工业企业财务报表.xlt″)
  *激活损益表
  oleapp.sheets(″损益表″).select
  *追加数据
  i=1
  do while i<=13
  if i#5 and i#9 and i#13
  oleapp.cells(i+6,4).value=本月数
  endi
  i=i+1
  skip
  endd
  应该注意的是,在Excel自带的损益表模板中,有些单元格是自动计算的,如产品销售利润、营业利润、利润总额,你不能够去修改的。这也是在上面程序中加入“if i#5 and i#9 and i#13”语句的原因。另外,你事先应该根据你的实际情况对损益表模板进行修改,比如设置纸张大小、字体等等。当然你也可以在运行时进行设置(加入oleapp.activeworkbook.printpreview)语句。
  上面只是简单地介绍了在VFP中生成损益表的方法。要想更好地将VFP和Excel结合,你可以在Excel中尝试“录制宏”的功能,因为你在Excel中的任何操作都能够被录制成“宏”。“宏”能够以VBA语句的形式重现你刚才的你操作。举一反三,这下利用VFP做出精美的财务状况变动表、利润分配表、主营业务收支明细表,再也不是难事了。