木落 发表于 2010-11-22 16:16:55

关于把Excel表当做数据库来处理的问题

各位好,小弟要用Excel表处理大量的数据,但是数据量太大,用普通的方法处理起来效率很低,所以想把Excel表当作数据库来处理,都需要安装什么软件?
目前机器环境
操作系统:Windows 7   Office2007
Excel表:是xls后缀的。
除了这些还需要安装什么?

dreamever 发表于 2010-11-23 15:27:39

数据量大的话,我觉的还是放弃用EXCEL吧,
首先EXCEL有行数的限制,好象2003是6万多行吧,并且EXCEL单元格的最大长度就是255个字符,而且EXCEL的读写效率肯定会低于数据库。再差的数据库也会比EXCEL快;
我是用JAVA的,如果要用EXCEL作为数据文件的话,象JXL这样的开源包就不错,用VBS的好象不用安装什么特别的软件,因为widnows系统就已经提供了EXCEL的测试对象模型,可以通过VBS直接访问的。

fuwu527751246 发表于 2010-11-23 16:35:20

灌水

sunnyswu 发表于 2010-11-23 17:17:07

可以通过odbc去访问,不知道这样的情况下,是否会快点
没这么做过,提供不了有价值的信息

泥泥虫 发表于 2010-11-23 17:28:47

数据量大的建议你不要使用Excel。超过7W+的数据 打开Excel已经是一个很慢的过程。建议你使用轻量级的数据库,。

TIB 发表于 2010-11-25 16:09:45

QTP通过ADO直接访问Excel,速度还可以

木落 发表于 2010-11-29 17:47:40

谢谢大家,问题已经解决。

sunnyswu 发表于 2010-11-29 18:27:34

谢谢大家,问题已经解决。
木落 发表于 2010-11-29 17:47 http://bbs.51testing.com/images/common/back.gif


    大哥(姐),您就不说说是如何解决的?
顺便 把代码贴出来

x35064347 发表于 2010-11-29 19:29:37

就是啊。顶!

木落 发表于 2010-12-2 18:19:53

回复 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
页: [1]
查看完整版本: 关于把Excel表当做数据库来处理的问题