VisualFoxpro生成任意打印字段报表的实现
-存在的问题
-使用VFP生成执行程序后,使用用户需要的任何一个数据库的字段组合报表都不是那么容易了。因为,一方面,软件开发的时候,不可能考虑到用户要求的未来报表的所有格式。另一方面,由于设计的报表格式文件已经编译成可执行文件,即使。FRX和。FRT文件被修改,需要在开发环境中重新编译,这对于用户来说是没有实现的。比如你需要一个员工列表和一个空字段,那么签名或者注册某个ID号就比较困难。
-解决方案
-使用VFP与Excel交换数据,完全控制Excel在VFP的运行(即自动服务器),可以很好地解决这个问题。关于如何控制Excel,一方面可以利用Excel的帮助文件的VBA语法,另一方面关于控制Excel语法的文章也不少。值得注意的是:1。为了提高效率,所有相关的计算、小计和总计都在VFP进行,并写入相应的记录;2.因为是两个软件,如果把大量的数据一个一个的插入Excel单元格,速度慢,所以如果数据量大,就要把VFP的数据表直接导出为Excel格式,然后VFP在后台控制Excel打开,用指定的Excel格式文件修改文档标题、列名、网格线,计算列宽,根据纸张大小调整字体大小。
-实现方法
详细说明:使用SQL结构化语言Select生成数据表。
-选择字段时,可以用一个表单Form1来联接两个列表框,一个列表框列出数据表的所有字段,另一个是空。用鼠标双击或拖动到空的列表框中选择一个字段(此时,包含所有字段的第一个列表框将不再显示拖动的字段,而是在另一个列表中。
-在本例中,form1包含一个list1和edit1以及两个按钮。
Form1.ini
public a、b、c、d、f、g
a = " SELECT "
b = " "
c = " FROM bn INTO CURSOR myquery "
d = " "
f = 0
g = 0
list 1 . dbl click
if len(all trim(b))= 0
b = b+this form . list 1 . value
else
b = b+","+this form . list 1 . value
endif
d = a+b+c
this form . edit 1 . refresh
for mm = 1 to this form . list 1 . list count
if this form . list 1 . selected(mm)
this form . list 1 . remove item(mm)
endif
end for
1.单击* *执行生成的select语句
select & b from bn into cursor my query
sele my query。
2.点击* *调用Excel
my = CreateObject(" Excel . application ")
my . visible = . t . * *如果可以设置为. f.
my.workbooks.add
传递给用户时选择我的查询。
gotop
For l = 1 to g
For I = 1 to f
字段名= field (I)
* *对于要生成中文的列标题,可以通过
一个英文字段名对应中文名称的参数库
my . active workbook . sheets(1)来解决。细胞(l,I)。value = myquery。& field name
end for
skip
end for
* *如果要添加一个空列,可以使用
my . active sheet . columns(f+1)。设置页眉my . active sheet . page setup .
center header(center footer)= " XXX "
0条评论