如何看待VB.net读取Excel文件的方法区别阿?(速度方面)

zrl05 2009-12-02 01:56:59
最近用到了EXCEL的读取
我采用的方法非常简单
Public Sub New(ByRef App As AppVarSet, ByRef FileName As String)
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet
Dim obj(,) As Object
Dim n As Integer, m As Integer
Try
XlBook = App.OpenExcel(FileName)
Try
XlSheet = XlBook.Worksheets(1)
......
能实现了,不过速度很慢。
本来打算开始学习access,把excel改成access
结果从论坛上看到有人用OLE方法,感觉速度也挺快啊
达人们说说,到底有没有必要把excel改成access,还是改进读excel的读法阿?


Private Sub open_excel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles open_excel.Click
Dim path, FileName, FileExname As String
Dim conn As String
Me.OpenFileDialog1.Title = "选择Excel文件"
Me.OpenFileDialog1.Filter = "Excel 文件|*.xls*"
If Me.OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
path = System.IO.Path.GetFullPath(OpenFileDialog1.FileName)
FileName = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
FileExname = System.IO.Path.GetExtension(OpenFileDialog1.FileName).ToUpper
FileName = Microsoft.VisualBasic.Left(FileName.ToUpper, FileName.Length - 4)

If FileExname = "XLSX" Then

conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"
Else
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties='Excel 12.0;HDR=YES';"

End If


dbfconn.ConnectionString = conn
'获取数据表列表
Dim table_list As Data.DataTable = GetSchemaTable(dbfconn, "TABLE")

.......

End If
End Sub


Private Function GetSchemaTable(ByVal connection As Data.OleDb.OleDbConnection, ByVal Type As String)
' 获取数据表列表
'Type 有:"TABLE,VIEW,ACCESS TABLE,SYSTEM TABLE",

Type = Type.ToUpper
connection.Open()
Dim table_list As Data.DataTable
table_list = connection.GetOleDbSchemaTable(Data.OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, Type})
connection.Close()
Return table_list
End Function
...全文
592 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zrl05 2009-12-03
  • 打赏
  • 举报
回复
明白您的意思了,谢谢
看来我得学习一下数据库的问题
结贴了哈


[Quote=引用 14 楼 acmain_chm 的回复:]
引用对了,access对合并的单元格也有办法处理阿?

如果直接用OLE则比较麻烦。这一点上一般的做法是限制EXCEL的格式。 通常的做法是。

你设计一个EXCEL的模板,当然要和你的用户商量,得到他们的同意。
然后对这个EXCEL的模板的单元格进行保护,只允许用户修改数据,不允许修改格式。
然后每个用户一个文件名,放在一个共享目录中 xx001.xls, xx002.xls .... xx199.xls
写个脚本,定时把这个目录中的所有EXCLE文件都读入到ACCESS。

其实用OLEDB或者excel.application 都没有关系。
[/Quote]
ACMAIN_CHM 2009-12-03
  • 打赏
  • 举报
回复
[Quote]对了,access对合并的单元格也有办法处理阿?[/Quote]

如果直接用OLE则比较麻烦。这一点上一般的做法是限制EXCEL的格式。 通常的做法是。

你设计一个EXCEL的模板,当然要和你的用户商量,得到他们的同意。
然后对这个EXCEL的模板的单元格进行保护,只允许用户修改数据,不允许修改格式。
然后每个用户一个文件名,放在一个共享目录中 xx001.xls, xx002.xls .... xx199.xls
写个脚本,定时把这个目录中的所有EXCLE文件都读入到ACCESS。

其实用OLEDB或者excel.application 都没有关系。
wwwwb 2009-12-03
  • 打赏
  • 举报
回复
XlBook = App.OpenExcel(FileName)
这个应该不算ADO方法吧?

这个是VBA

如果你的查询数据量少,且用EXCEL内置函数、公式可以方便地解决问题的话,可以不用MDB。
zrl05 2009-12-03
  • 打赏
  • 举报
回复
哦,明白了,我从来没想到这点
数据录入修改还是使用excel
不过录入程序时,我先转化成access?

对了,access对合并的单元格也有办法处理阿?

3x



[Quote=引用 9 楼 acmain_chm 的回复:]
引用问题就在,后台这些文件的数据同事使用用要经常更新,但是我们有的同事压根没接触过access,甚至都没安装....

还是让你的同事用EXCEL吧。
你写个程序把这几百个EXCEL读到ACCESS并不复杂。

人总是反对变化的。所以你的同事中只要有几个不愿意用ACCESS的你就没办法。
[/Quote]
zrl05 2009-12-03
  • 打赏
  • 举报
回复
XlBook = App.OpenExcel(FileName)
这个应该不算ADO方法吧?
至于使用方法嘛,我举个例子您看看阿
参数1 参数2 参数3 结果
1 1 1 3
1 1 3 5
1 2 2 6
1 2 4 7
2 3 1 8
如果要查询(1,1,1)对应的值那结果是3
如果要查询(1,1,2)对应的值就应该是
第一行和第2行的结果进行一定运算,取其插值(例如(3+5)/2=4
。。。。。
不知我说清楚没...






[Quote=引用 8 楼 wwwwb 的回复:]
引用 6 楼 zrl05 的回复:
其实就是调用这些数据做些查询比较工作----使用穷举法(好像是这个词来着)


引用 4 楼 wwwwb 的回复:
建议修改成MDB,如果EXCEL文件超过5M(10M),就要经常备份XLS文件,至少2007之前是这样,不知道
2007、2010是否有改进。

你的具体用途是什么?


你是用ADO连接XLS文件,再做处理?
怎么比较,能否举例说明
[/Quote]
ACMAIN_CHM 2009-12-03
  • 打赏
  • 举报
回复
[Quote]问题就在,后台这些文件的数据同事使用用要经常更新,但是我们有的同事压根没接触过access,甚至都没安装....[/Quote]

还是让你的同事用EXCEL吧。
你写个程序把这几百个EXCEL读到ACCESS并不复杂。

人总是反对变化的。所以你的同事中只要有几个不愿意用ACCESS的你就没办法。
wwwwb 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zrl05 的回复:]
其实就是调用这些数据做些查询比较工作----使用穷举法(好像是这个词来着)


引用 4 楼 wwwwb 的回复:
建议修改成MDB,如果EXCEL文件超过5M(10M),就要经常备份XLS文件,至少2007之前是这样,不知道
2007、2010是否有改进。

你的具体用途是什么?

[/Quote]
你是用ADO连接XLS文件,再做处理?
怎么比较,能否举例说明
zrl05 2009-12-03
  • 打赏
  • 举报
回复
问题就在,后台这些文件的数据同事使用用要经常更新,但是我们有的同事压根没接触过access,甚至都没安装....


[Quote=引用 5 楼 acmain_chm 的回复:]
引用对了,修改成access效果如何阿?

ACCESS的话,看你的具体应用是什么,做为数据库来使用显示ACCESS会比EXCEL效率高上很多,并且可以实现很多数据库的功能。 但对普通用户的操作性上会有些不习惯,毕竟ACCESS和EXCEL在管理数据上有很多理念上的不同。
[/Quote]
zrl05 2009-12-03
  • 打赏
  • 举报
回复
其实就是调用这些数据做些查询比较工作----使用穷举法(好像是这个词来着)



[Quote=引用 4 楼 wwwwb 的回复:]
建议修改成MDB,如果EXCEL文件超过5M(10M),就要经常备份XLS文件,至少2007之前是这样,不知道
2007、2010是否有改进。

你的具体用途是什么?
[/Quote]
ACMAIN_CHM 2009-12-03
  • 打赏
  • 举报
回复
[Quote]对了,修改成access效果如何阿?[/Quote]

ACCESS的话,看你的具体应用是什么,做为数据库来使用显示ACCESS会比EXCEL效率高上很多,并且可以实现很多数据库的功能。 但对普通用户的操作性上会有些不习惯,毕竟ACCESS和EXCEL在管理数据上有很多理念上的不同。
wwwwb 2009-12-03
  • 打赏
  • 举报
回复
建议修改成MDB,如果EXCEL文件超过5M(10M),就要经常备份XLS文件,至少2007之前是这样,不知道
2007、2010是否有改进。

你的具体用途是什么?
zrl05 2009-12-03
  • 打赏
  • 举报
回复
哦,明白了。非常感谢。
不过速度是慢得太过了,现在打开也至少要半分钟....
随着以后数据的越来越多,恐怕会越来越慢....

对了,修改成access效果如何阿?

3x

ACMAIN_CHM 2009-12-02
  • 打赏
  • 举报
回复
[Quote]如何看待VB.net读取Excel文件的方法区别阿?(速度方面)[/Quote]
利用OLE会比较快

[Quote]达人们说说,到底有没有必要把excel改成access,还是改进读excel的读法阿? [/Quote]
如果速度在可容忍范围内,则没必要修改代码。

App.OpenExcel(FileName) 这种方法可以控制EXCEL的许多格式和细节。
OLE方式则仅可以象数据库一样读取数据。
zrl05 2009-12-02
  • 打赏
  • 举报
回复
--我的工作量其实不大,用到excel文件有100多个,每个就用到一个sheet, 大概80多行,十多列吧,主要做些查询比较工作。
如下图所示,红色地方表示要用到的地方,其它地方可以不读,只是为了看起来更清晰罢了

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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