主题:[原创]从当前任意dbf-table 到 xl-table的实现过程
jinlonggao
[专家分:17130] 发布于 2007-01-14 19:02:00
请版主请此贴清理掉!有孽障在哭丧,没法呆了[em20]
最后更新于:2010-01-25 17:01:00
回复列表 (共119个回复)
21 楼
jinlonggao [专家分:17130] 发布于 2007-03-11 08:41:00
早晨听见乌鸦叫,感觉也挺好!
有思想的乌鸦比只会报喜的喜鹊好,乌鸦兄论述得很对.此程序虽然速度慢点,但已经可以满足应到之需了.
当然,也不能固步自封,10楼的意见,我也一直在考虑.我在想,如果能用复制/粘贴方法的话很可能会加快速度.这就涉及到怎样把数据表记录全部放到剪切板上去的问题,我想都是微软的东东,应该有座沟通的桥梁吧!
希望高手们不断努力,群策群力,共同解决这个问题!
22 楼
zxl931 [专家分:3420] 发布于 2007-03-11 11:09:00
乌鸦兄比喻很形象,速度问题提供以下思路:
先用EXPORT TO这个最好的设备打好公路地基,再调用excel这个超级铺路机在地基上完成后续工作,发挥各自优势,速度会很高。
EXPORT TO "c:\kk.xls" xls FIELDS .. &&打地基
XLApp = createobject("Excel.Application") &&调用铺路机
XLApp.visible = .T.
XLApp.Workbooks.Open("c:\kk.xls")
..... &&进行格式设置的代码
没有充分测试,但可能会在数据类型方面出现问题,大家可以测试一下。
23 楼
jinlonggao [专家分:17130] 发布于 2007-03-11 11:21:00
老乡的思路不错,我暂时没时间试,请老乡代劳,看会不会出现别的问题,如可行,老乡功劳大矣!
先谢了!
24 楼
zxl931 [专家分:3420] 发布于 2007-03-11 16:08:00
经测试(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 楼
jinlonggao [专家分:17130] 发布于 2007-03-11 19:32:00
[quote]经测试(vfp9.0,excel2003):
2、问题主要在日期型字段:如果dbf中日期格式为“2002-02-02”,用copy to导出到excel将变为“2-Feb-02”,不符合中国人的习惯。并且用设置单元格格式为日期型的办法解决不了。
[/quote]
我试过,设置日期格式在交互环境中可行,用代码也应可以实现!
请继续努力!
26 楼
moz [专家分:37620] 发布于 2007-03-11 20:22:00
日期格式可以如下设置:(通过录制宏所得)
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 楼
jinlonggao [专家分:17130] 发布于 2007-03-12 08:50:00
MOZ的问题可归结为如何在创建 Excel.Application 之前检测是否已有该应用存在,若不存在,创建之,否则,在其中新建一个工作表
28 楼
北京种子乐 [专家分:3710] 发布于 2007-06-06 06:48:00
这个帖子太有价值了,顶上来让更多的人受益。
29 楼
波波2007 [专家分:40] 发布于 2007-07-24 16:19:00
怎么贴到命令中去?平时能用得上的,请指教!
30 楼
jinlonggao [专家分:17130] 发布于 2007-07-24 16:58:00
我把VFP环境作为开发平台,平时工作不用它.
29楼朋友所谓的平时,可能是在VFP环境中,所以,把我的代码存储为一个程序文件(.prg),然后在VFP的命令窗口中直接调用即可(在调用前,当前工作区中必须有打开的数据表作为它操作的对象).
我来回复