| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2512 人关注过本帖
标题:dbf自由表转excel后身份证号变科学计数法怎么办?
只看楼主 加入收藏
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
dbf自由表转excel后身份证号变科学计数法怎么办?
dbf自由表转excel后身份证号变科学计数法怎么办?能不能在程序里直接定义其输出到excel的格式?

用了前辈的程序,想修改为输出字符型:
程序代码:
cDbfFile = GETFILE("dbf")
IF EMPTY(cDbfFile)
   RETURN
ENDIF
USE (cDbfFile) ALIAS FoxTable IN 0 && 打开所选则的表并定义别名为FoxTable
IF NOT USED("FoxTable")
   =MESSAGEBOX("打开表失败, 程序将中止! ", 16, "Error")
   RETURN
ENDIF
cExcelFile = PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls") && 激活"另存为?"对话框, 设置默认保存文件名。
IF EMPTY(cExcelFile)
   CLOSE DATABASES ALL
   RETURN
ENDIF
SELECT FoxTable
oExcelSheet = GETOBJECT("","Excel.Sheet") && 产生Excel对象
IF NOT TYPE("oExcelSheet") = "O" && 如果oExcelsheet 不是对象型函数
   =MESSAGEBOX ("Excel 对象创建失败, 程序将中止! ",16,"Error")
   RETURN
ENDIF
oExcelApp = oExcelSheet.Application
oExcelApp.Workbooks.Add() && 添加新工作簿
oExcelApp.ActiveWindow.WindowState=2
oSheet = oExcelApp.ActiveSheet
nFldCount = AFIELDS(aFldList, "FoxTable")&&把当前表的结构信息存放在一个数组中, 并且返回表的字段数。
FOR i = 1 TO nFldCount
    oSheet.Cells(1,i).Value = aFldList[i,1] && 将表字段名复制到对应的单元格中
ENDFOR
cRecc = STR(RECCOUNT("FoxTable")) && 返回当前表的记录数目
SCAN && 扫描指针当前的位置
    WAIT WINDOW ALLTRIM (STR (RECNO ()))+ "/" + cRecc NOWAIT
    FOR i = 1 TO nFldCount
        vValue = .NULL.
        IF AT(aFldList[i,2], "CDLMNFIBYT") = 0 && 如果字段类型不是VFP 的字段类型
           LOOP
        ENDIF
        cFldName = aFldList[i,1]
        vValue = EVALUATE(cFldName) && 计算字符表达式的值并返回结果
        DO CASE
           CASE aFldList[i,2] = "C" && 字符/字符串
                vValue = TRIM(vValue) && TRIM() 返回删除全部后缀空格后的指定字符表达式
           CASE aFldList[i,2] = "D" && 日期
                vValue = DTOC(vValue)
           CASE aFldList[i,2] = "T" && 日期时间
                vValue = TTOC(vValue)
           CASE INLIST(aFldList[i,2], "N", "F", "I", "B", "Y") && 数值
           CASE aFldList[i,2] = "L" && 逻辑
           CASE aFldList[i,2] = "M" && 备注型
           OTHERWISE
                vValue = .NULL.
        ENDCASE
        IF VARTYPE(vValue) = "C" AND EMPTY(vValue)
           LOOP
        ENDIF
        IF NOT ISNULL(vValue) &&判断vValue 结果是否为NULL 值
           oSheet.Cells(RECNO("FoxTable")+1,i).Value = vValue && 将值导出到对应单元格中
        ENDIF
     ENDFOR
ENDSCAN
cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
FOR i = 1 TO nFldCount
    cColumn = SUBSTR(cChrStr,INT((i- 1)/26),1)+SUBSTR(cChrStr,IIF(MOD(i,26)=0,26,MOD(i,26)),1)
    oSheet.Columns(cColumn+ ":" + cColumn).ColumnWidth = 12 && 命名工作表列的名称并取得导入了数据的列的宽度
    IF aFldList[i,2] = "M"
       oSheet.Columns(cColumn + ":" + cColumn).WrapText = .F. && 设置备注型型字段列不自动换行
    ENDIF
ENDFOR
oExcelApp.ActiveWorkbook.SaveAs(cExcelFile) && 设置另存为Excel 文件
oExcelApp.ActiveWorkbook.Close(.F.) && 关闭工作簿
oExcelApp.Quit && 退出Excel
oExcelSheet = .NULL.
oExcelApp = .NULL. && 释放Excel 对象
WAIT CLEAR
=MESSAGEBOX("转换完毕! ",64,"OK")
CLOSE DATABASES ALL


[此贴子已经被作者于2016-11-19 11:12编辑过]

搜索更多相关主题的帖子: excel 身份证号 
2016-11-19 11:11
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
已解决!
程序代码:
        IF NOT ISNULL(vValue) &&判断vValue 结果是否为NULL 值
           oSheet.Cells(RECNO("FoxTable")+1,i).NumberFormatLocal = "@"  *************************************************加上这句就可以了!把指定的单元格设为文本格式
           oSheet.Cells(RECNO("FoxTable")+1,i).Value = vValue && 将值导出到对应单元格中
        ENDIF


[此贴子已经被作者于2016-11-19 11:34编辑过]

2016-11-19 11:32
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
不让“终止悬赏”,请版主指导!
2016-11-19 11:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
分送给我就可以了

DO IT YOURSELF !
2016-11-19 11:39
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:684
专家分:1303
注 册:2009-3-1
收藏
得分:10 
结贴的时候选择无满意结贴就可以了
2016-11-19 11:44
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
回贴仅为收藏.
2016-11-22 14:38
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2232
专家分:3913
注 册:2007-4-27
收藏
得分:0 
测试了一下:用这个代码完成花了数分钟,用COPY TO ?? TYPE XL5 只要数秒钟。在无特殊要求的情况下,用copy to ? type xl5嘛好了。

只求每天有一丁点儿的进步就可以了
2016-11-22 15:55
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
回复 7楼 wengjl
有要求,就是有备注字段,需要将备注字段的内容也输出出来。所以需要这样。但速度确实较慢,特别是加了定义为单元格格式之后就更慢了。不知道如何提高速度!请高手指导!
2016-11-23 11:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
分两步走:
第一步:先COPY复制数据
第二步:在EXCEL表中增加一列,单独导入备注 内容,这样可以增加数据导入速度。

坚守VFP最后的阵地
2018-09-13 21:15
快速回复:dbf自由表转excel后身份证号变科学计数法怎么办?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058354 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved