51Testing软件测试论坛

标题: 关于把Excel表当做数据库来处理的问题 [打印本页]

作者: 木落    时间: 2010-11-22 16:16
标题: 关于把Excel表当做数据库来处理的问题
各位好,小弟要用Excel表处理大量的数据,但是数据量太大,用普通的方法处理起来效率很低,所以想把Excel表当作数据库来处理,都需要安装什么软件?
目前机器环境
操作系统:Windows 7   Office2007
Excel表:是xls后缀的。
除了这些还需要安装什么?
作者: dreamever    时间: 2010-11-23 15:27
数据量大的话,我觉的还是放弃用EXCEL吧,
首先EXCEL有行数的限制,好象2003是6万多行吧,并且EXCEL单元格的最大长度就是255个字符,而且EXCEL的读写效率肯定会低于数据库。再差的数据库也会比EXCEL快;
我是用JAVA的,如果要用EXCEL作为数据文件的话,象JXL这样的开源包就不错,用VBS的好象不用安装什么特别的软件,因为widnows系统就已经提供了EXCEL的测试对象模型,可以通过VBS直接访问的。
作者: fuwu527751246    时间: 2010-11-23 16:35
灌水
作者: sunnyswu    时间: 2010-11-23 17:17
可以通过odbc去访问,不知道这样的情况下,是否会快点
没这么做过,提供不了有价值的信息
作者: 泥泥虫    时间: 2010-11-23 17:28
数据量大的建议你不要使用Excel。超过7W+的数据 打开Excel已经是一个很慢的过程。建议你使用轻量级的数据库,。
作者: TIB    时间: 2010-11-25 16:09
QTP通过ADO直接访问Excel,速度还可以
作者: 木落    时间: 2010-11-29 17:47
谢谢大家,问题已经解决。
作者: sunnyswu    时间: 2010-11-29 18:27
谢谢大家,问题已经解决。
木落 发表于 2010-11-29 17:47



    大哥(姐),您就不说说是如何解决的?
顺便 把代码贴出来
作者: x35064347    时间: 2010-11-29 19:29
就是啊。顶!
作者: 木落    时间: 2010-12-2 18:19
回复 8# sunnyswu

要处理的Excel版本是2003的,这个跟电脑上现有的office版本没有关系
  asd=getFieldV("[通话时长(s)],","C:\ZCTT\20101122171413.xls")
MsgBox asd
Function getFieldV(fieldsName,xlsPath)
Set xlsDoc = CreateObject("Excel.Application")
xlsDoc.Workbooks.Open(xlsPath)
xlsDoc.Worksheets(1).Activate
Set oSheet = xlsDoc.ActiveSheet
oSheetNam = oSheet.name
xlsDoc.Quit
Set xlsDoc = Nothing
filterV = ""
While InStr(fieldsName,",")<>0
    flagnum =0
    locNum = InStr(fieldsName,",")
    fieldName = Left(fieldsName,locNum-1)
    fieldsName =Mid(fieldsName,locNum+1,Len(fieldsName))
    MsgBox fieldName
    ai = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&xlsPath&";Extended Properties=Excel 4.0"
bi = "Select "&fieldName &" from ["&oSheetNam&"$] group by "&fieldName
Set conn = CreateObject("ADODB.Connection")
conn.Open ai
Set rs = CreateObject("ADODB.Recordset")
rs.Open bi,conn
While Not rs.EOF 'And flagnum < getall_num
      rd = rs("通话时长(s)")
      MsgBox rd
      If StrComp(rd,"")<>0 Then
       filterV = filterV &rd&","
       flagnum = flagnum + 1
      End If
      rs.MoveNext
wend
conn.Close
Set rs =Nothing
Wend
If strcomp(filterV,"")=0 Then
getFieldV =""
else
getFieldV = Left(filterV,Len(filterV)-1)
End If
End Function




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2