回 帖 发 新 帖 刷新版面

主题:[原创]从当前任意dbf-table 到 xl-table的实现过程

请版主请此贴清理掉!有孽障在哭丧,没法呆了[em20]

回复列表 (共119个回复)

21 楼

早晨听见乌鸦叫,感觉也挺好!

有思想的乌鸦比只会报喜的喜鹊好,乌鸦兄论述得很对.此程序虽然速度慢点,但已经可以满足应到之需了.

当然,也不能固步自封,10楼的意见,我也一直在考虑.我在想,如果能用复制/粘贴方法的话很可能会加快速度.这就涉及到怎样把数据表记录全部放到剪切板上去的问题,我想都是微软的东东,应该有座沟通的桥梁吧!

希望高手们不断努力,群策群力,共同解决这个问题!

22 楼

乌鸦兄比喻很形象,速度问题提供以下思路:
  先用EXPORT TO这个最好的设备打好公路地基,再调用excel这个超级铺路机在地基上完成后续工作,发挥各自优势,速度会很高。

EXPORT TO  "c:\kk.xls" xls FIELDS ..       &&打地基
XLApp = createobject("Excel.Application")  &&调用铺路机
XLApp.visible = .T.
XLApp.Workbooks.Open("c:\kk.xls")
.....                                      &&进行格式设置的代码


没有充分测试,但可能会在数据类型方面出现问题,大家可以测试一下。

23 楼

老乡的思路不错,我暂时没时间试,请老乡代劳,看会不会出现别的问题,如可行,老乡功劳大矣!

先谢了!

24 楼

经测试(vfp9.0,excel2003):
1、数值型、字符型、备注型数据没有问题
2、问题主要在日期型字段:如果dbf中日期格式为“2002-02-02”,用copy to导出到excel将变为“2-Feb-02”,不符合中国人的习惯。并且用设置单元格格式为日期型的办法解决不了。
   
我想到的解决办法有两个:
   (1)将源数据表用sele语句生成一个临时表(readwrite参数使临时表可读写),并用alter语句将日期字段的类型修改为字符型。
   SELECT * FROM medicine INTO CURSOR kk readwrite
   ALTER table kk alter 日期字段名 C(8)
   copy to ".." type xls
   XLApp = createobject("Excel.Application")  
   XLApp.visible = .T.
   XLApp.Workbooks.Open("c:\kk.xls")
   ...          &&格式设置的代码   

   (2)将日期字段用vfp代码重新用高老师那样的方法导出到对应单元格。

   不知道,有无更好的解决办法?




25 楼

[quote]经测试(vfp9.0,excel2003):
2、问题主要在日期型字段:如果dbf中日期格式为“2002-02-02”,用copy to导出到excel将变为“2-Feb-02”,不符合中国人的习惯。并且用设置单元格格式为日期型的办法解决不了。 
[/quote]
我试过,设置日期格式在交互环境中可行,用代码也应可以实现!
请继续努力!

26 楼

日期格式可以如下设置:(通过录制宏所得)
Selection.NumberFormatLocal = "yyyy""年""m""月""d""日"";@"
Selection.NumberFormatLocal = "[$-809]dd mmmm yyyy;@"
Selection.NumberFormatLocal = "[DBNum1][$-804]yyyy""年""m""月""d""日"";@"
Selection.NumberFormatLocal = "yyyy""年""m""月""d""日"";@"

我现在的做法基本上是copy to 
再对EXCEL进行对象处理
基于速度问题,因为在应用程序之间交换指令存在处理时间,
所以比较好的方法是,在处理过程中,尽量放在后台,
直到处理完成后,再设置 Excel.Application.Visible=.t.
因为在操作过程还要显示的话,会有时间上的需求.
(事实上,我宁愿牺牲这点速度,因为可以让客户看得到处理过程及现在的位置)

我现在的问题是,每一次创建 Excel.Application 对象,都会独立新建一个对象.
而不能由同一个 EXCEL 打开.

27 楼

MOZ的问题可归结为如何在创建 Excel.Application 之前检测是否已有该应用存在,若不存在,创建之,否则,在其中新建一个工作表

28 楼

这个帖子太有价值了,顶上来让更多的人受益。

29 楼


怎么贴到命令中去?平时能用得上的,请指教!

30 楼

我把VFP环境作为开发平台,平时工作不用它.
29楼朋友所谓的平时,可能是在VFP环境中,所以,把我的代码存储为一个程序文件(.prg),然后在VFP的命令窗口中直接调用即可(在调用前,当前工作区中必须有打开的数据表作为它操作的对象).

我来回复

您尚未登录,请登录后再回复。点此登录或注册