以下承接2009年3月15日标题为:“请高手进入”文

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下导出的文本文件名每次是不一样的,因此每次还要将先前的文本文件重命名,然后,才能用新的覆盖原“资产库存明细报表”,这样很麻烦)。

谢谢!谢谢!

 所属BLOG 发表时间:2009-3-15 18:11:00    [回复]  [引用]  [选此帖为最佳答案]  
1 楼  
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
 

 此帖被评30分  
作者:fyyylyl
专家分:7390


3 楼  
经测试,全部通过。谢谢!谢谢!

为使程序更加完美,如果您有时间的话,我想您一定能将程序改进的更合理些的。

比如:

1、导入Excel Sheet中的宽度,最好为自适应;
2、在输入文本文件名时,如用户没找到所要的文件或改变注意取消作业时,应关闭当前程序直接退出,而不是停留在程序代码屏幕内;
3、当执行完程序后,用户选择不存盘时,程序应正常退出。
4、我在单位测试,在生成Excel表时,速度特别慢,打慨用了4~5分钟时间,在不升级硬件的情况下,速度能否提升(硬件环境:奔4 1.8HZ,内存1G;数据量:25栏,8000条记录)?

  最后修改于2009-3-16 16:48:00
 
  

7 楼  
oExl.ActiveWorkbook.close(.t.)
请问将上述代码插入哪一行可行?因我是初学者,请指点。

cFileName=PUTFILE("","","XLS")
oExl.ActiveWorkbook.SaveAs(cFileName)
oExl.Visible=.t. 

我将它放在最后一行,可是不生效耶!

我的意思是:
1、当在执行程序过程中,在输入文件名,遇到没找到文件或改变注意,取消作业时,要直接退出;
2、试运行后,已生成Excel格式文档页面,但没有必要存盘时,要直接退出。

让人有选择的余地......

关于宽度自适应问题和速度能否提升问题也请帮忙解决。谢谢!
 
8 楼  
放到最后,退出时使用:
oExl.ActiveWorkbook.close(.f.)  &&不保存退出
oExl.ActiveWorkbook.close(.t.)  &&直接保存退出

 不成功呀!请参看我上传的错误报告抓图附件