VFP的报表怎样才可以打印到文件??

sunjian514 2002-12-27 06:11:37
请高手指点。
当然那种用程序画表到*.TXT的就免了。有没有办法打印到WORD或EXCEL。
...全文
538 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
流星尔 2003-01-18
  • 打赏
  • 举报
回复
对于没有规律的东西,vfp的报表不能胜任.
sunjian514 2003-01-12
  • 打赏
  • 举报
回复
说来说去都是把表数据换格式导出,难道VFP自己的报表就没有用武之地吗?哪怕是用图片形式导出也好啊!我的表格有的比较复杂,不能完全遵循二维表规律。
SongDaXia 2003-01-11
  • 打赏
  • 举报
回复
鄙人认为:
用Createobject("Excel.Application")建立应用程序对象,然后向这个对象写数据的方法,当数据较少时尚可,我几年前用类似代码处理较大的表是,简直不能容忍其太慢的速度,用Copy to ... CLS 固然快一些,但很多数据不是可以直接COPY的,非要先处理计算不可.后来,我试着先crete cursor建立一个虚拟表,将计算生成的数据先填到一个大的虚拟表中,然后将虚拟表COPY成一个XLS工作表,结果达到了理想的速度.
流星尔 2003-01-10
  • 打赏
  • 举报
回复
至于怎么画线,合并单元格等,在上面的代码都已经包含了。
流星尔 2003-01-10
  • 打赏
  • 举报
回复
有方法改进.
1、那就是直接先生成vfp表,然后直接通过excel的导入数据源的代码生成到excel中.然后处理报表。比如加一列,生成个标题.或者合并单元格.因为不需要处理数据,所以速度很快.
2、更快的方法的就是直接copy to。然后打开copy to后的excel表格处理报表。使excel和要打印的报表格式一样。
westbulls 2003-01-10
  • 打赏
  • 举报
回复
版主,以上方法是可以使用,但是速度太慢了,有没有方法改进!
sunjian514 2003-01-02
  • 打赏
  • 举报
回复
厉害!佩服!
您说的这部分知识对我来说还是太高深了,我得花一点时间消化。
以前我还没想到配合其他程序会这么有用。
流星尔 2003-01-01
  • 打赏
  • 举报
回复
会写excel就会写word。其实这段代码是不用自己写的。
比如你不知道控制excel怎么划一条线。你可以在excel先录制宏,然后画一条线。然后停止录制。编辑宏,把里面的代码拷到vfp稍做修改即可。

之所以要区分类型,是由于excel里会把数字的默认看做数值型。比如身份证号码,会用科学计数法来表示。所以要前面加上一个引号来转一下。
range就是指定当前操作那些单元格对象。
hbdygs="A1:"+chr(fcount()+64)+"2"

HB1.range(hbdygs).select

就是把第一个单元格(a1)为左上角,字段列数2共两行选定
sunjian514 2002-12-30
  • 打赏
  • 举报
回复
不愧是板主就是高水平!!
您的大作我基本上明白了,不知到什么时候才能达到您的水平,有两处在帮助里查不到vartype(&cvalue)$"NYFI"N是数值型,Y表示货币行,其它的是什么意思?还有range()是什么意识?
我本来是想找一种能够把报表打印到其它文件里的办法,就象一个镜像。你却编了一个导出到外部程序的方式。难道VFP就没有这个功能或可用的控件吗?
炳哥的办法太专业了我只是为了扶助我现在的工作才用VFP的,将来能当经济师就不错了,软件工程师还太遥远。再说我看到C语言就头大。
周翔的方式不错,但是缺点编程意识,没有自己操作的余地。
流星尔 2002-12-29
  • 打赏
  • 举报
回复
和copy to是有区别的。上面的代码就如同在excel中处理报表。
流星尔 2002-12-28
  • 打赏
  • 举报
回复
先建立一个toexcel的prg文件。
然后把上面的代码复制到里面。
然后你在哪个地方想要打印到excel的话,只要do toexcel with 'aa'
其中aa就是你要打印到excel的表名,就是数据源。

适用于vfp6以上版本。因为其中有个函数vartype5.0没有
流星尔 2002-12-28
  • 打赏
  • 举报
回复
para tablename

set esca on

wait "按esc键取消!" window AT 20,30 timeout 1
HB1=createobject("EXCEL.APPLICATION")
HB1.application.visible=.t.
HB1.workbooks.add
HB1.SHEETS("SHEET1").select

sele (tablename)

hbdygs="A1:"+chr(fcount()+64)+"2"

HB1.range(hbdygs).select

HB1.selection.HorizontalAlignment = 3 &&水平方向 2左对齐,3居中,4右对齐
HB1.selection.VerticalAlignment = 2 &&垂直方向 1靠上,2居中,3靠下
HB1.selection.WrapText = .f. && ??
HB1.selection.orientation = 0 && ??
HB1.selection.AddIndent = .f. && ??
HB1.selection.ShrinkToFit = .f. && ??
HB1.selection.MergeCells = .t. && ??


HB1.ActiveCell.FormulaR1C1 = "请输入报表标题"
HB1.ActiveCell.Characters.font.name = "隶书"
HB1.ActiveCell.Characters.font.FontStyle = "常规"
HB1.ActiveCell.Characters.font.ColorIndex = 1 &&字符颜色






for i=66 to fcount()+65
columnname=chr(i-1)+"3"
activecellname=columnname
cvalue=allt(field(i-65))
if vartype(&cvalue)="C"
select max(len(alltrim(&cvalue))) from (tablename) into array awidth
mx=iif(len(allt(cvalue))<=awidth,awidth,len(allt(cvalue)))
hb1.range(activecellname+":"+activecellname).columnwidth=mx*1.5
else
if vartype(&cvalue)$"NYFI"
select max(len(alltrim(str(&cvalue,12,2)))) from (tablename) into array awidth
mx=iif(len(allt(cvalue))<=awidth,awidth,len(allt(cvalue)))
hb1.range(activecellname).columnwidth=mx*1.5
endif
endif
HB1.range(activecellname).FormulaR1C1=cvalue

endfor

j=4
go top
do while not eof()
for s=66 to fcount()+65
columnname=chr(s-1)+allt(str(j))
activecellname=columnname
cvalue=allt(field(s-65))

if vartype(&cvalue)="C"
HB1.range(activecellname).FormulaR1C1="'"+allt(&cvalue)
else
if vartype(&cvalue)$"NYFI"
HB1.range(activecellname).FormulaR1C1=&cvalue
endif
endif
endfor
skip
j=j+1
enddo


* HB1.ACTIVEWORKBOOK.SAVE &&自动保存数据
* HB1.ACTIVEWORKBOOK.CLOSE &&关闭当前工作簿
* HB1.QUIT
allenzhoujun 2002-12-28
  • 打赏
  • 举报
回复
copy to 文件名 type xl5就行了
fengxi 2002-12-27
  • 打赏
  • 举报
回复
直接打印的方法就没有,但可以用DDE或COM方法将结果写到EXCEl或WORLD去

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧