51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3506|回复: 18
打印 上一主题 下一主题

[求助] Excel导入问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-9-10 12:01:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我从Excel往DataTable导数据,但是Excel里的字段不是文本形式,而是通过Excel公式从其他字段得到的,导入后在DataTable不显示值,而显示#REF!请问各位,这个如何解决?有没有哪能设置让DataTable导入只是文本,不导入公式?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-9-10 12:07:49 | 只看该作者
在excel里设置。。设置单元格为文本。。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-9-10 14:51:17 | 只看该作者
我的测试流程是这样的:Excel里有sheet1和sheet2两个sheet,分别作为两个测试案例的输入数据,当sheet1的数据导入DataTable后,得到的结果会存入sheet1,而这个输出结果又是第二个测试案例的输入项,所以我在sheet2里要用公式取得sheet1里的结果,这样才能连续执行测试案例,其实我把所有数据都写在一个sheet里即可,但是我希望通过不同sheet区分测试数据。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-9-10 14:55:58 | 只看该作者
File --> settings -->Resoures ,选择other location,然后xxxx,导入excel
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-9-10 16:17:59 | 只看该作者
这样导进去确实只是文本格式,但是我sheet2的数据要依赖于sheet1的结果,也就是说在测试执行之前sheet2为空,当执行完sheet1后,sheet2才会有值,所以我如果在测试之前导入excel,那么sheet2是空的,还是不符合我的要求。。。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-9-10 16:25:55 | 只看该作者
我的两个测试用例其实录制了两个脚本,我在执行的时候是用Test Batch Runner把它们串起来的,而这两个用例的输入参数我都写在了一个excel文件的两个sheet里,每执行一个用例是要导入对应的一个sheet
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-9-10 16:51:41 | 只看该作者
不明白你的意思,就算全部导入,我也可以只取一瓢,datatable可以定位sheet的,其他的还是问题么?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2009-9-10 17:57:20 | 只看该作者
我的流程是导入sheet1,执行测试用例1,得到测试结果outA导出到sheet1,从sheet1将outA放到sheet2中,导入sheet2,执行测试用例2,得到测试结果outB导出到sheet2,这些都是连续的,所以一开始就导入sheet2此时还没有outA这个值,而sheet2中的outA是通过公式从sheet1中的outA得到的。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-9-10 18:42:53 | 只看该作者
为何要这样不停的换?项目需求么?
首先,这是连续的一个流程,为何要用两个测试用例来实现?
其次,就算是两个测试用例,也可以用同一个excel的sheet来实现
再次,就算真的按照你说的那样来执行,好,你两个测试用例都导入一下,你真的可以试一下,好像是用例打开的时侯执行导入的,所以,如果你写的赋值什么的都正确,应该可以的

哎,下班了,我帮你试下嘛
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-9-10 18:55:56 | 只看该作者
晕,好像不能改变值的,要回家了,要不没公交了,明天给你答案~
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2009-9-10 19:31:14 | 只看该作者
呵呵,是这样的:
首先:他们是独立的场景,但是有依赖关系,我是以每个场景作为一个脚本,里面有正例和反例,场景二的输入可能就是场景一的输出
其次:不同场景可以在一个sheet里实现,但是我的场景有很多,每个场景又有若干输入参数,所以分开sheet这样比较清楚
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2009-9-11 09:34:12 | 只看该作者
test1:
===============================================================
SystemUtil.CloseProcessByName "EXCEL.EXE"

DataTable.Import "C:\test.xls"

DataTable.GlobalSheet.GetParameter("A").Value = 20

DataTable.Export "C:\test.xls"
===============================================================

test2

===============================================================
SystemUtil.CloseProcessByName "EXCEL.EXE"

DataTable.Import "C:\test.xls"

Print DataTable.LocalSheet.GetParameter("A").Value

DataTable.Export "C:\test.xls"
===============================================================

在c盘根目录下面创建一个名为test.xls的excel表,sheet1 的a2单元格初始值为10,sheet2的a2单元格初始值为 =(sheet1!A2)+10就是sheet1的A2单元格加10。在test1的脚本里,我先导入test.xls表,然后修改10为20,最后导出到test.xls表,接着执行test2,print出sheet2中a2单元格的值,是30,满足要求了吧?如果不想操作整个excel表格,还可以使用importsheet 和exportsheet 方法来进行导入和导出
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-9-11 11:17:35 | 只看该作者
我试了,这样可以了,我以前用importsheet 的方式导入,公式不能识别,现在整体导入excel,就可以实现了,多谢,多谢。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2009-9-11 11:27:46 | 只看该作者
现在还有个小问题,我原来文件的sheet为sheet1和sheet2,导入后变为Global和Action1,再导出后也变成了Global和Action1,也就是说sheet的名字变了,我希望不变,这个可以解决吗?
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2009-9-11 11:41:40 | 只看该作者
应该可以吧,你可以试试导出sheet的方法,就是 exportsheet
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2009-9-11 11:48:58 | 只看该作者
晕,好像不行,exportsheet两个参数,第一个是要导出的excel的文件名,第二个是源datatable表的名字,这儿应该是global,sorry,我没有试过就妄下结论了,汗!想别的办法嘛
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-9-11 12:03:53 | 只看该作者
神啊,真不敢相信,我居然试成功了,代码如下:

============================================================================
SystemUtil.CloseProcessByName "EXCEL.EXE"

DataTable.AddSheet "Sheet1"
DataTable.AddSheet "Sheet2"

DataTable.ImportSheet "C:\test.xls", "Sheet1", "Sheet1"
DataTable.ImportSheet "C:\test.xls", "Sheet2", "Sheet2"

DataTable.GetSheet("Sheet1").GetParameter("A").Value = 30

DataTable.ExportSheet "C:\test.xls", "sheet1"
DataTable.ExportSheet "C:\test.xls", "Sheet2"

===================================================================
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-9-11 12:04:05 | 只看该作者
修改了一下,不需要sheet2的,所以,这儿仅仅导入一个sheet即可,但是用sheet2的时侯一定要导入sheet1哦
=====================================================================
SystemUtil.CloseProcessByName "EXCEL.EXE"

DataTable.AddSheet "Sheet1"

DataTable.ImportSheet "C:\test.xls", "Sheet1", "Sheet1"

DataTable.GetSheet("Sheet1").GetParameter("A").Value = 30

DataTable.ExportSheet "C:\test.xls", "sheet1"

===================================================================

[ 本帖最后由 风雪夜归人 于 2009-9-11 12:09 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2009-9-23 20:48:13 | 只看该作者
Datatable改名后就得不到公式了,我Debug发现DataTable导入excel后在sheet2里显示的是“=[]Sheet1!A1+1”,而不是“=Sheet1!A1+1”,不知道为什么多了“[]”,导致公式不能使用,这个怎么解决?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-27 06:40 , Processed in 0.078163 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表