| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7667 人关注过本帖
标题:导入EXCEL表出现数据类型不匹配
只看楼主 加入收藏
Kerberos
Rank: 5Rank: 5
来 自:江苏扬州
等 级:职业侠客
帖 子:227
专家分:355
注 册:2012-9-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
导入EXCEL表出现数据类型不匹配
程序代码:
public mypath
mypath=""
mypath=getfile("xls")
_ole_excel = CreateObject("Excel.Application")
_ole_excel.WorkBooks.Open(mypath)    && 要打开的工作表名(xls)必须是全路径
_ole_excel.WorkSheets(1).Activate   &&激活指定的工作簿
bookExcel = _ole_excel.APPLICATION.Workbooks.OPEN(mypath)
nrows=bookExcel.Worksheets(1)
UsedRange =nrows.UsedRange
r = UsedRange.ROWS.COUNT

USE 岗位分类表 EXCLUSIVE
ZAP
myexcel=createobject('excel.application')      &&创建一个对象
myexcel.visible=.f.&&不可见
bookexcel=myexcel.workbooks.open(mypath)      &&打开指定文件
o_SheetName=myexcel.application.ActiveSheet.Name    &&获取当前激活工作表的名称
UsedRange =bookexcel.worksheets(o_SheetName).UsedRange     &&返回工作表中可使用的区域,UsedRange表的属性
o_rows=UsedRange.rows.count    &&汇总行
o_cols=UsedRange.columns.count    &&汇总列
IF o_rows<=1
   =MESSAGEBOX("待导入数据行数太少,请检查!",0+16,"提示")
ELSE
   FOR i=2 TO o_rows
       m1=myexcel.cells(i,1).value      &&工号   
       m2=myexcel.cells(i,2).value      &&姓名     
       m3=myexcel.cells(i,3).value      &&人员代码
       m4=myexcel.cells(i,4).value      &&岗位分类
       APPEND BLANK
REPLACE 工号 WITH m1,姓名 WITH m2,人员代码 WITH m3,岗位分类 WITH m4
    ENDFOR
ENDIF
myexcel.workbooks.close    &&关闭工作区
myexcel.quit    &&关闭excel
browse
运行到REPLACE 工号 WITH m1,姓名 WITH m2,人员代码 WITH m3,岗位分类 WITH m4 时出现报错,说是数据类型不匹配,我表里的所有字段类型都是字符型啊,难道跟excel表里的数据类型有关?如果有关怎样改excel表里数据的类型?谢谢!
搜索更多相关主题的帖子: color EXCEL 工作表 
2012-09-28 15:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
看下EXCEL表中各字段数据类型,是否与数据表的数据类型相符。

坚守VFP最后的阵地
2012-09-28 17:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:2 
改为文本格式试下
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2012-09-28 17:30
Kerberos
Rank: 5Rank: 5
来 自:江苏扬州
等 级:职业侠客
帖 子:227
专家分:355
注 册:2012-9-11
收藏
得分:0 
回复 2楼 sdta
请问excel表里各数据类型怎么看啊?

想学好VFP,想做VFP高手,想帮助更多的人解决VFP问题!
2012-09-29 09:35
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:2 
回复 4楼 Kerberos
选中分类就看到结果了
2012-09-29 11:51
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
收藏
得分:3 
回复 4楼 Kerberos
选中EXCEL中的某一列。按ctrl+1,(也可以右键某列,选单元格格式),查看该列的数据类型。

我是来向高手学习的!
2012-09-29 14:15
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:681
专家分:1287
注 册:2009-3-1
收藏
得分:10 
以下是引用Kerberos在2012-9-28 15:35:22的发言:

public mypath
mypath=""
mypath=getfile("xls")
_ole_excel = CreateObject("Excel.Application")
_ole_excel.WorkBooks.Open(mypath)    && 要打开的工作表名(xls)必须是全路径
_ole_excel.WorkSheets(1).Activate   &&激活指定的工作簿
bookExcel = _ole_excel.APPLICATION.Workbooks.OPEN(mypath)
nrows=bookExcel.Worksheets(1)
UsedRange =nrows.UsedRange
r = UsedRange.ROWS.COUNT
 
USE 岗位分类表 EXCLUSIVE
ZAP
myexcel=createobject('excel.application')      &&创建一个对象
myexcel.visible=.f.&&不可见
bookexcel=myexcel.workbooks.open(mypath)      &&打开指定文件
o_SheetName=myexcel.application.ActiveSheet.Name    &&获取当前激活工作表的名称
UsedRange =bookexcel.worksheets(o_SheetName).UsedRange     &&返回工作表中可使用的区域,UsedRange表的属性
o_rows=UsedRange.rows.count    &&汇总行
o_cols=UsedRange.columns.count    &&汇总列
IF o_rows<=1
   =MESSAGEBOX("待导入数据行数太少,请检查!",0+16,"提示")
ELSE
   FOR i=2 TO o_rows
       m1=myexcel.cells(i,1).text      &&工号   
       m2=myexcel.cells(i,2).text      &&姓名      
       m3=myexcel.cells(i,3).text      &&人员代码
       m4=myexcel.cells(i,4).text     &&岗位分类
       APPEND BLANK
REPLACE 工号 WITH m1,姓名 WITH m2,人员代码 WITH m3,岗位分类 WITH m4
    ENDFOR
ENDIF
myexcel.workbooks.close    &&关闭工作区
myexcel.quit    &&关闭excel
browse运行到REPLACE 工号 WITH m1,姓名 WITH m2,人员代码 WITH m3,岗位分类 WITH m4 时出现报错,说是数据类型不匹配,我表里的所有字段类型都是字符型啊,难道跟excel表里的数据类型有关?如果有关怎样改excel表里数据的类型?谢谢!
修改成红色的试试
2012-09-29 21:27
sd_tysd
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:81
专家分:319
注 册:2009-7-23
收藏
得分:1 
一般出现最多的数值字段与字符字段容易出现问题,将EXCEL中的列的类型设置与VF中的设置匹配相同。
另一个办法,分别列出。
REPLACE 工号 WITH m1
REPLACE 姓名 WITH m2
REPLACE 人员代码 WITH m3
REPLACE 岗位分类 WITH m4
看那行出错,在核对类型。
2012-10-02 22:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11800
专家分:43421
注 册:2006-5-13
收藏
得分:1 
1、将读入数值型的数据由text改为value试试。如假设工号是数值型则改为
m1=myexcel.cells(i,1).VALUE      &&工号

2、在repl语句之前对读入的数据进行判断。例如假设工号是数值型,则:
m1=myexcel.cells(i,1).VALUE
if type(m1)#"N"
    m1=val(m1)
endif
   

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-10-03 08:45
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
以下是引用hu9jj在2012-10-3 08:45:47的发言:

2、在repl语句之前对读入的数据进行判断。例如假设工号是数值型,则:
m1=myexcel.cells(i,1).VALUE
if type(m1)#"N"
    m1=val(m1)
endif
   
m1 = val(m1)这样也行 ?

貌似以前写控制excel 的代码的时候,如果单元格的数据类型不同
用同一个变量时会提示数据类型格式错误

但是刚才试了试
aa = 9
aa = str(aa)
居然也通过了
谁能告诉我
为什么

个性太多,无法显示
2012-10-03 09:13
快速回复:导入EXCEL表出现数据类型不匹配
数据加载中...
 
   



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

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