读取excel所有数据,为什么excel里的值有,读出来是空值?

bts2003 2008-09-02 10:32:02
代码如下,没有问题,但为什么有的excel里有的数值,比如:15.8971700668334 0.0000443303033534903等,读出来都是空值,
只有日期和字符读出来没有问题?

取得excel文件所有内容:

'add microsoft ado frist.
Private Sub Command2_Click()
Dim adoConnection As New ADODB.Connection
Dim adoRecordset As New ADODB.Recordset
CommonDialog1.ShowOpen
'OLE DB + ODBC Driver 方式:
'adoConnection.Open "Data Provider=MSDASQL.1;driver=Microsoft Excel Driver (*.xls);DBQ=e:\temp\book2.xls"
'Microsoft.Jet.OLEDB.4.0 方式,(建?)
adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & CommonDialog1.FileName & ";Extended Properties='Excel 8.0;HDR=Yes'"

adoRecordset.Open "select * from [sheet1$]", adoConnection, adOpenKeyset, adLockOptimistic
Debug.Print adoRecordset.RecordCount
Dim i As Integer
Do Until adoRecordset.EOF
For i = 0 To adoRecordset.Fields.Count - 1
Debug.Print adoRecordset.Fields.Item(0).Name
Debug.Print adoRecordset.Fields.Item(0).Value
Next i
adoRecordset.MoveNext
Loop



End Sub

...全文
916 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
carefire 2008-09-07
  • 打赏
  • 举报
回复

1.
因为我看到你用Microsoft.Jet.OLEDB.4.0,所以我提到mdb数据库!
在网上找到这个,看看可能有用:
http://blog.miniasp.com/post/2008/08/How-to-read-Excel-file-using-OleDb-correctly.aspx

2.
如果已有的excel文件很少,耐心等一等也没关系。
如果已有的excel文件很多(或许以后不会再有),做一个转换程序转为mdb或ms-sql,有空就让它转换,完了再快速分析。
这是指标。

3.
我不知你的工作是否要对数据进行维护与分析,我厂的数据库是ms-sqlserver和excel报表结合,
sqlserver是每分钟取一次样,有几千个字段,每月有4万多条记录。
这样如果放在excel文件,存取性能非常差,所以我们采用少量数据的excel定制报表结合大量数据的sqlserver方式。
这是治本。

4.
找到excel.rang内存格式
这是高手之道。找到了别忘了共享。


carefire 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bts2003 的回复:]
如果用excel做对象读可以,引用microsoft excel 11.0 object library,读每一个sheet中的cells,但这样excel内容太多,几万行,速度太慢,要几十秒,怎么办?
[/Quote]

像楼主的问题,我也一直在找办法,我怀疑Range对象是一个特殊数组,类似于安全数组,不过不知其内存格式。

拿excel当作数据存储器我认为不太好,excel最大行数是65535,而且excel可能会“善意地”帮你改单元格格式。

用mdb来存储数据,用excel作为视图,这样子更好,因为在vb或vba里从mdb读取数据到excel速度超快。
bts2003 2008-09-04
  • 打赏
  • 举报
回复
在你的connection string里加上IMEX=1
i.e.

adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & CommonDialog1.FileName & ";IMEX=1;Extended Properties='Excel 8.0;HDR=Yes'"

2楼的,我加了 IMEX=1,还是不行,提示"找不到可插入的ISAM"?

3楼正解,但我做的程序已有excel文件,读出来做统计分析,因此,不存在你说的用MDB存数据!
MyTools_Studio 2008-09-03
  • 打赏
  • 举报
回复
在你的connection string里加上IMEX=1
i.e.

adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & CommonDialog1.FileName & ";IMEX=1;Extended Properties='Excel 8.0;HDR=Yes'"
bts2003 2008-09-02
  • 打赏
  • 举报
回复
如果用excel做对象读可以,引用microsoft excel 11.0 object library,读每一个sheet中的cells,但这样excel内容太多,几万行,速度太慢,要几十秒,怎么办?

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧