2010版本excel表格如何导入到vf中

作者在 2015-08-13 12:08:50 发布以下内容
EOLE=CREATEOBJECT('EXCEL.APPLICATION')
LCFILENAME=GETFILE([XLS]) && 此处 XLS 改为EXCEL2010文件的扩展名
IF EMPTY(LCFILENAME)
   RETURN
ENDIF
EOLE.WORKBOOKS.OPEN(LCFILENAME)
EOLE.WORKSHEETS(1).ACTIVATE
LNROW=EOLE.SHEETS(1).USEDRANGE.ROWS.COUNT
LNCOL=EOLE.SHEETS(1).USEDRANGE.COLUMNS.COUNT
DIMENSION LAXLS(LNROW,LNCOL),FIELDNAME(LNCOL) && laxls 存贮工作表中的数据,FIELDNAME存贮列标题名
FOR lnI=1 TO LNCOL
    FIELDNAME[lnI]=EOLE.SHEETS(1).CELLS(1,lnI).VALUE && 获取列标题名
ENDFOR
LAXLS = EOLE.ACTIVESHEET.USEDRANGE.VALUE
EOLE.QUIT
RELEASE EOLE

CZDM=[]
FOR lnI=1 TO LNCOL
    CZDM=CZDM+FIELDNAME[lnI]+[ V(200)]+IIF(lnI<LNCOL,[,],[])
ENDFOR
CREATE CURSOR XMDA (&CZDM)
CREATE CURSOR TEMP (&CZDM)
INSERT INTO TEMP FROM ARRAY LAXLS
INSERT INTO XMDA SELECT * FROM TEMP WHERE RECNO()>1
SELECT XMDA
BROWSE
Excel问题 | 阅读 6845 次
文章评论,共2条
厨师王德榜
2016-10-27 11:58
1
 博主好,你这篇文章让我受益,谢谢了。我采用了另一种方式来读取EXCEL数据,ADO连接的方式,并且,已经把数据取进RecordSet中了,然后,根据RecordSet每列的属性,空白的DBF也建立好了,接下来,我没有找到把RecordSet一次性注入DBF的办法,所以,我只好RecordSet.MoveNext,一条条的写进去,这种方式按理说也没有问题,但是,用户的EXCEL表千差万别,有时候,用户的表中有异常值(就是EXCEL常见的诸如“#REF!”、“#DIV/0!”这样的错误值)逐条写入时,如果遇到RecordSet中有这样的值,那么,我设置的Try ... Catch 语句会捕获异常,程序中止。这是以前的情况,现在,如果想要实现这个:逐条写入的时候,如遇到异常值,希望程序跳过异常而不是中止,给这个格子一个默认值(比如数值型字段默认0,文本型字段默认空格)继续处理后面的,这个我不知道如何实现?(我不知道这里如何发附件上来,所以没有加附件。)
sostemp
2023-12-26 11:55
2
以下是引用厨师王德榜在2016-10-27 11:58的发言1
博主好,你这篇文章让我受益,谢谢了。我采用了另一种方式来读取EXCEL数据,ADO连接的方式,并且,已经把数据取进RecordSet中了,然后,根据RecordSet每列的属性,空白的DBF也建立好了,接下来,我没有找到把RecordSet一次性注入DBF的办法,所以,我只好RecordSet.MoveNext,一条条的写进去,这种方式按理说也没有问题,但是,用户的EXCEL表千差万别,有时候,用户的表中有异常值(就是EXCEL常见的诸如“#REF!”、“#DIV/0!”这样的错误值)逐条写入时,如果遇到RecordSet中有这样的值,那么,我设置的Try ... Catch 语句会捕获异常,程序中止。这是以前的情况,现在,如果想要实现这个:逐条写入的时候,如遇到异常值,希望程序跳过异常而不是中止,给这个格子一个默认值(比如数值型字段默认0,文本型字段默认空格)继续处理后面的,这个我不知道如何实现?(我不知道这里如何发附件上来,所以没有加附件。)
ADO方式也比较好的。
游客请输入验证码
浏览376312次