高手帮忙解决下如何让mshflexgrid读取excel中某个内容
vb吧
全部回复
仅看楼主
level 8
凡尘是道 楼主
我想自己做个软件来使自己的工作效率更高点,可是遇到了困难,百度都找不到答案。
具体如下:
我用mshflexgrid做了个表格,比如我想使MSHFlexGrid1.TextMatrix(1, 1)=Excel表格中的一个数据,并用这个数据参与一些计算。可是怎么都实现不了。。。
MSHFlexGrid1.TextMatrix(1, 1)=Sheet1 !A1
MSHFlexGrid1.TextMatrix(1, 2)=Sheet1 !A2
....
请高手帮下忙啊,再次感谢!
2014年02月12日 10点02分 1
level 8
凡尘是道 楼主
这是我初步做的界面:
2014年02月12日 10点02分 2
level 8
凡尘是道 楼主
@cbm666
@sunshinebean
@…烟花飘飘…
请大神帮忙解决下,谢谢了!
2014年02月12日 10点02分 3
2014年02月12日 10点02分
level 8
凡尘是道 楼主
@、Zizy
请帮帮忙,谢谢您了!
2014年02月12日 11点02分 4
level 13
循环行
循环列
mshflexgrid1.textmatrix(行 , 列)= vbexcel.cells(行 , 列 )
2014年02月12日 15点02分 5
谢谢您!
2014年02月13日 01点02分
level 8
凡尘是道 楼主
@cbm666
您好,我又遇到问题想请教下您,百度查不到啊。
代码如下:
Public Function Write_Data()
Dim rng As Range, i%, j%
Dim litem
Call Open_Data '打开Excel
Set xlsheet = xlBook.Worksheets(8) '打开EXCEL工作表
Set rng = xlApp.ActiveSheet.UsedRange
Set litem = Form1.DataLong.ListItems.Add()
For j = 1 To rng.Rows.Count
Set litem = Form1.DataLong.ListItems.Add()
For i = 1 To rng.Columns.Count
litem.Text = xlsheet.Cells(j, 1)
litem.SubItems(i) = xlsheet.Cells(j, i + 1)
Next i
Next j
MsgBox rng.Rows.Count
MsgBox rng.Columns.Count
Call Close_Excel
End Function
我把Ecxel读取到ListView1控件里面,Excel总行数为340行,150列内容,点击运行,大概要等上1分钟才会出来。怎么要那么久啊?有什么方法读取快点吗?
我的想法是,一个程序运行要读取至少20几次Excel,我想把Excel里面的内容读取到ListView1里面后再对ListView1进行操作,这样就少了多次读取Excel的时间,可是发现更慢。。。
2014年03月14日 08点03分 6
吧务
level 13
二维数组
2014年03月14日 08点03分 7
我试了,用二维数组还是好慢啊。
2014年03月14日 09点03分
代码楼下
2014年03月14日 09点03分
level 8
凡尘是道 楼主
读取还是很慢啊。。。。
Public Function Write_Data()
Dim rng As Range, i%, j%
Dim Data() As String
Call Open_Data '打开Excel
Set xlsheet = xlBook.Worksheets(8) '打开EXCEL工作表
Set rng = xlApp.ActiveSheet.UsedRange
ReDim Data(rng.Rows.Count, rng.Columns.Count)
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
Data(i, j) = xlsheet.Cells(i, j)
Next
Next
MsgBox Data(2, 1)
Call Close_Excel
End Function
2014年03月14日 09点03分 8
不要这样赋值整体。rang用二维数组=。速度是这个100倍
2014年03月14日 11点03分
回复 VBzhuyongxing :能否给出几行核心代码啊?谢谢了。昨天下班后,我在考虑一个问题,就是这个二维数组在程序运行期间,我不能释放,因为很多计算都是基于这个数据的,必须到程序解释,这样会不会占用很多内存啊?
2014年03月15日 00点03分
回复 VBzhuyongxing :能否给出几行核心代码啊?谢谢了。昨天下班后,我在考虑一个问题,就是这个二维数组在程序运行期间,我不能释放,因为很多计算都是基于这个数据的,必须到程序结束,这样会不会占用很多内存啊?
2014年03月15日 00点03分
level 8
凡尘是道 楼主
找到新方法了,如下:
控件用的是DataGrid,用ADO读取Excel 文件,Excel文件有350行150列内容,
读取只需要1-2S时间。
代码如下:
Public Function Read_Excel()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\data\Data.xls;" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
cn.CursorLocation = adUseClient
rs.Open "SELECT * FROM [SHEET8$A1:EG]", cn, adOpenStatic
Set Form1.DataGrid1.DataSource = rs
Form1.DataGrid1.Refresh
End Function
在网上查看@cbm666老师给其他同学解答的问题得出,要读取DataGrid某行某列内容代码是:DataGrid1.row=2
DataGrid1.col=3
msgbox DataGrid1.text
所以自己做了个函数:
Function DataGrid(i As Integer, j As Integer) As String
Form1.DataGrid1.Row = i
Form1.DataGrid1.Col = j
DataGrid = Form1.DataGrid1.Text
End Function
每次调用的话直接DataGrid(2,3)
但是问题又来了,我使用一个循环如下:
For i = 0 To 36 'DataGrid(i, 0) = ""
combo1.AddItem DataGrid(i, 0)
Next i
但是显示出来的内容不是自己想要的,数据有误,查找了老半天,找到了问题所在。
原来DataGrid1控件在Form1上显示的宽度不够,只能显示21条数据,所以i=0 to 36 索引越界,这个到目前为止还没解决。希望各位帮忙,只要这个实现了,我自己编写的软件就快完工了,每天上班都没时间写软件,偷偷学,偷偷写,都快1个月了,1楼那个界面的软件却还是没有完成。。。
@VBzhuyongxing
2014年03月16日 06点03分 9
1