标题:怎样用vfp控制excel自动转入大量结构相同的工作表
只看楼主
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
1.在EXCEL中选定所有工作表,删除前4行(表头)和最后一行(合计行)(每张表行数一样。请教:如果各张工作表行数不一,怎样删除最后一行?)
只要工作表中数据规范,不需要删除前4行及最后的合计行,导入数据时,程序会帮你处理的
2.在EXCEL中选定所有工作表,在第一列前插入一列(用以填写工作表标签来区别各工作表中数据)。请问:怎样将工作表标签填写在插入一列?例如怎样自动将第二张工作表标签Shift2填写在第二张工作表的第一列的各行中。
只要记住工作表中的顺序号就行了,程序会帮你处理
下面是我处理的同一工作簿中多工作表数据导出的代码
程序代码:
CZDM=[]
FOR ii=1 TO 24
    CZDM=CZDM+CHR(64+iI)+[ V(200)]+IIF(Ii<24,[,],[])
*    CZDM=CZDM+[A]+PADL(ii,2,[0])+[ V(200)]+IIF(ii<24,[,],[])
ENDFOR
CREATE CURSOR MXBYY (&CZDM,BH C(2))

EOLE=CREATEOBJECT('EXCEL.APPLICATION') 
EOLE.WORKBOOKS.OPEN("D:\SL\EXCEL\慢性病用药范围.XLS")
*EOLE.VISIBLE=.T.
*当前工作薄中工作表总数
NCOUNT=EOLE.WORKSHEETS.COUNT
*----读取EXCEL文件的各个工作表名称及有数据的行数与列数
FOR Ii=1 TO NCOUNT
    WORKNAME=eole.sheets(Ii).name
    LCBH=PADL(CHRTRANC(WORKNAME,CHRTRANC(WORKNAME,[0123456789],[]),[]),2,[0]) && 工作表名称
    eole.Worksheets(iI).Activate
    LNROW=EOLE.SHEETS(iI).USEDRANGE.ROWS.COUNT && 有数据的行数
    LNCOL=EOLE.SHEETS(Ii).USEDRANGE.COLUMNS.COUNT && 有数据的列数
    DIMENSION laxls(lnrow,lncol)
    laxls = EOLE.activesheet.usedrange.value
    CREATE CURSOR TEMP (&CZDM)
    INSERT INTO TEMP FROM ARRAY LAXLS
    INSERT INTO MXBYY SELECT *,&LCBH FROM TEMP WHERE RECNO()>1
ENDFOR
EOLE.QUIT                                                && 退出EXCEL
RELEASE EOLE
SELECT MXBYY
BROWSE
工作簿:
慢性病用药范围.rar (1.43 MB)




坚守VFP最后的阵地
2014-03-20 11:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 

图中显示的内容就是楼主需要的标签内容,方法见楼上的代码,我的代码中,最后获取的是标签的顺序号,可以把代码改下。

坚守VFP最后的阵地
2014-03-20 12:09
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
从建立临时表,到数据导出结束,(31个工作表,数据4万多条,字段25个)用时5秒左右

[ 本帖最后由 sdta 于 2014-3-20 12:19 编辑 ]

坚守VFP最后的阵地
2014-03-20 12:16
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:4 
留脚印,备用
2014-03-20 19:40
bald_eagle
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2014-3-21
得分:4 
真棒  
2014-03-21 14:12
bald_eagle
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2014-3-21
得分:0 
谢谢!
2014-03-21 14:13
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
得分:0 
以下是引用sdta在2014-3-20 11:44:52的发言:

只要工作表中数据规范,不需要删除前4行及最后的合计行,导入数据时,程序会帮你处理的只要记住工作表中的顺序号就行了,程序会帮你处理
下面是我处理的同一工作簿中多工作表数据导出的代码CZDM=[]
FOR ii=1 TO 24
    CZDM=CZDM+CHR(64+iI)+[ V(200)]+IIF(Ii<24,[,],[])
*    CZDM=CZDM+[A]+PADL(ii,2,[0])+[ V(200)]+IIF(ii<24,[,],[])
ENDFOR
CREATE CURSOR MXBYY (&CZDM,BH C(2))
 
EOLE=CREATEOBJECT('EXCEL.APPLICATION')  
EOLE.WORKBOOKS.OPEN("D:\SL\EXCEL\慢性病用药范围.XLS")
*EOLE.VISIBLE=.T.
*当前工作薄中工作表总数
NCOUNT=EOLE.WORKSHEETS.COUNT
*----读取EXCEL文件的各个工作表名称及有数据的行数与列数
FOR Ii=1 TO NCOUNT
    WORKNAME=eole.sheets(Ii).name
    LCBH=PADL(CHRTRANC(WORKNAME,CHRTRANC(WORKNAME,[0123456789],[]),[]),2,[0]) && 工作表名称
    eole.Worksheets(iI).Activate
    LNROW=EOLE.SHEETS(iI).USEDRANGE.ROWS.COUNT && 有数据的行数
    LNCOL=EOLE.SHEETS(Ii).USEDRANGE.COLUMNS.COUNT && 有数据的列数
    DIMENSION laxls(lnrow,lncol)
    laxls = EOLE.activesheet.usedrange.value
    CREATE CURSOR TEMP (&CZDM)
    INSERT INTO TEMP FROM ARRAY LAXLS
    INSERT INTO MXBYY SELECT *,&LCBH FROM TEMP WHERE RECNO()>1
ENDFOR
EOLE.QUIT                                                && 退出EXCEL
RELEASE EOLE
SELECT MXBYY
BROWSE工作簿:
谢谢!
在excel中用宏处理后再导入dbf表也比较快。
2014-03-21 15:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-428795-1-1.html




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

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