主题:请高手进入
dirkseng [专家分:10] 发布于 2009-03-15 12:16:00
以下承接2009年3月12日标题为:“请VFP高手帮忙解决8位日期转10位日期的问题”文
您不愧是高手!谢谢您了!
SELECT kucun
nCount=AFIELDS(MyArray)
GO TOP
WAIT WINDOW "正在生成Excel文件,请稍候......" NOWAIT
oExl=CREATEOBJECT("Excel.Application")
oExl.Workbooks.Add
oExl.Worksheets("sheet1").Activate
FOR I=1 TO nCount
oExl.ActiveSheet.Columns(I).ColumnWidth=20
oExl.Cells(1,I).Value=MyArray(I,1)
Endfor
SCAN
FOR J=1 TO nCount
cField=MyArray(J,1)
oExl.Cells(RECNO()+1,J).Value=&cField
ENDFOR
ENDSCAN
WAIT CLEAR
oExl.Visible=.t.
通过测试,可运行。不过还有些小的细节,能修正一下就更好了。
1、以“〇”开头的数字,转入Excel文件后,“〇”不能有丢失。请比较:标签号“A81744704810001”的资产序列号,DBF文件中为“02005053”,Excel文件中为“2005053”。
2、字符型字段,自动左对齐,数值型字段,右对齐。
3、关于在Excel中的金额问题,小数点后应自动显示2位(在导入前就设定好,不想在Excel中重新设置),对于超过2位的,只截取2位,不做四舍五入处理(如遇单价、数量、或兑换率等除外)。
4、关于“类别”、“地点”,可否不导入?因为有时可以原封不动的将EXCEL表内的数据粘贴到另一个格式一样的表中,还有,我想向您学习怎样处理其中的无用信息这类事件。
5、生成Excel Sheet后,能否做到只要用户输入一个文件名后,自动存盘推出当前操作界面,不要由用户去另存盘。
6、在执行此程序时,能否设置成由用户自行选择文本文件?(注:因为从Oracle下导出的文本文件名每次是不一样的,因此每次还要将先前的文本文件重命名,然后,才能用新的覆盖原“资产库存明细报表”,这样很麻烦)。
谢谢!谢谢!
(因在上次的无法给您加分,限定最高只能得50分,故转入此条)
最后更新于:2009-03-31 21:18:00
回复列表 (共9个回复)
沙发
fyyylyl [专家分:8550] 发布于 2009-03-15 18:11:00
1-5:
SELECT 资产序列号,资产原值,当月折旧;
FROM kucun INTO CURSOR aaa &&此处选取“资产序列号,资产原值,当月折旧”3个字段--可根据实现需要随意选取
nCount=AFIELDS(MyArray)
GO TOP
WAIT WINDOW "正在生成Excel文件,请稍候......" NOWAIT
oExl=CREATEOBJECT("Excel.Application")
oExl.Workbooks.Add
oExl.Worksheets("sheet1").Activate
FOR I=1 TO nCount
oExl.ActiveSheet.Columns(I).ColumnWidth=20
oExl.Cells(1,I).Value=MyArray(I,1)
Endfor
SCAN
FOR J=1 TO nCount
cField=MyArray(J,1)
IF MyArray(J,2)="C"
oExl.Cells(RECNO()+1,J).Value="'"+&cField
ELSE
oExl.Cells(RECNO()+1,J).Value=&cField
IF MyArray(J,2)="N"
oExl.Cells(RECNO()+1,J).NumberFormatLocal = "0.00_ "
Endif
ENDIF
ENDFOR
ENDSCAN
WAIT CLEAR
cFileName=PUTFILE("","","XLS")
oExl.ActiveWorkbook.SaveAs(cFileName)
oExl.Visible=.t.
6."自行选择文本文件":
txtFileName=GETFILE("TXT","","确定")
appe from (txtFileName) sdf
板凳
fyyylyl [专家分:8550] 发布于 2009-03-15 18:15:00
“高手”实不敢当!我在给你的邮件中已经说明,我只不过一名医疗专业出身、从事行政管理工作的爱好者而已。
3 楼
dirkseng [专家分:10] 发布于 2009-03-15 23:23:00
经测试,全部通过。谢谢!谢谢!
为使程序更加完美,如果您有时间的话,我想您一定能将程序改进的更合理些的。
比如:
1、导入Excel Sheet中的宽度,最好为自适应;
2、在输入文本文件名时,如用户没找到所要的文件或改变注意取消作业时,应关闭当前程序直接退出,而不是停留在程序代码屏幕内;
3、当执行完程序后,用户选择不存盘时,程序应正常退出。
4、我在单位测试,在生成Excel表时,速度特别慢,打慨用了4~5分钟时间,在不升级硬件的情况下,速度能否提升(硬件环境:奔4 1.8HZ,内存1G;数据量:25栏,8000条记录)?
4 楼
dirkseng [专家分:10] 发布于 2009-03-15 23:37:00
请高手帮忙解决上述不存盘退出等问题。
5 楼
dirkseng [专家分:10] 发布于 2009-04-03 07:22:00
请高手们帮忙解决上述问题呀!
谢谢!
6 楼
qjbzjp [专家分:8830] 发布于 2009-04-03 10:03:00
oExl.ActiveWorkbook.close(.t.)
7 楼
dirkseng [专家分:10] 发布于 2009-04-03 20:36:00
oExl.ActiveWorkbook.close(.t.)
请问将上述代码插入哪一行可行?因我是初学者,请指点。
cFileName=PUTFILE("","","XLS")
oExl.ActiveWorkbook.SaveAs(cFileName)
oExl.Visible=.t.
我将它放在最后一行,可是不生效耶!
我的意思是:
1、当在执行程序过程中,在输入文件名,遇到没找到文件或改变注意,取消作业时,要直接退出;
2、试运行后,已生成Excel格式文档页面,但没有必要存盘时,要直接退出。
让人有选择的余地......
关于宽度自适应问题和速度能否提升问题也请帮忙解决。谢谢!
8 楼
qjbzjp [专家分:8830] 发布于 2009-04-03 22:13:00
放到最后,退出时使用:
oExl.ActiveWorkbook.close(.f.) &&不保存退出
oExl.ActiveWorkbook.close(.t.) &&直接保存退出
9 楼
dirkseng [专家分:10] 发布于 2009-04-04 19:31:00
[quote]放到最后,退出时使用:
oExl.ActiveWorkbook.close(.f.) &&不保存退出
oExl.ActiveWorkbook.close(.t.) &&直接保存退出
[/quote]
不成功呀!我已抓报错图了,可惜呀,在回复中我无法将抓图上传!
我将以新发帖的形式进行新发帖,然后附上附件。请参看2009年4月4日新贴“请高手进入(2)”
我来回复