注册 登录
编程论坛 VB6论坛

求助VB读取excel后如何筛选数据

zyh1031 发布于 2013-07-26 12:53, 2884 次点击
excel表格内容如下
快递公司 快递单号 寄件日期 寄件人姓名 寄件人电话
申通     123456    20131010  王二小    1102
圆通     3217876   20100909  王小二    1002
申通     8877221   20121212  王八蛋    10001

我用VB程序将表格导入之后,想对其进行筛选再重新导出。
例如 我需要筛选出 快递公司 全部为 申通 的数据。

代码改怎么弄呢?
目前我是使用ADO方式读取的excel

是不是修改此句代码就可以?
rs.Open "select * from [Sheet1$]", cn, adOpenDynamic, adLockOptimistic
可是不知道该如何修改。。求指教。不甚感谢。

[ 本帖最后由 zyh1031 于 2013-7-27 09:44 编辑 ]
18 回复
#2
hjxlj2013-07-27 15:01
你用vb程序是如何导入Excel表格的?是用OLE控件,还是用自动化的方式,或者其它什么方法导入的?你导入的方式不同,筛选的方法也不同。希望你描述清楚,最好贴上你导入的代码上来。
#3
zyh10312013-07-27 16:05
回复 2楼 hjxlj
是使用OLE方式导入的
程序代码:
sFile = CommonDialog1.FileName
    Text1.Text = sFile
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFile & ";Extended Properties=""Excel 8.0;HDR=YES;"""
    cn.CursorLocation = adUseClient
    rs.Open "SELECT * FROM [Sheet1$A1:C10002]", cn, adOpenStatic
    Set DataGrid1.DataSource = rs


现在困惑我的就是
如何将符合条件的excel表里某几行数据单独显示出来
#4
zyh10312013-07-27 16:11
回复 2楼 hjxlj
不知道我这个方法可行吗
哪种筛选方法最简单快捷就用哪种吧
#5
lowxiong2013-07-27 17:40
rs.Open "SELECT * FROM [Sheet1$A1:C10002] where 快递公司='申通'", cn, adOpenStatic

应该行吧
#6
zyh10312013-07-27 18:11
回复 5楼 lowxiong

好吧。。。没想到我居然2到如此地步了

感谢版主。。。。
#7
hjxlj2013-07-27 22:30
唉,你是太二了,,结帖吧。
#8
zyh10312013-07-27 22:41
回复 7楼 hjxlj
呵呵 现在用VB的人太少了 有人回复真是难得了。。

现在有个问题 就是导出excel的时候 为什么表头无法导出呢。。

只有本站会员才能查看附件,请 登录


代码如下:
程序代码:
   Dim ex As Object
    Dim i As Integer
    Dim j As Integer
    Dim xlapp As Excel.Application
    Dim xlbook As Excel.Workbook
    Dim xlsheet As Excel.Worksheet
    Set xlapp = CreateObject("Excel.Application")
    xlapp.Visible = True
    Set xlbook = xlapp.Workbooks.Add
    Set xlsheet = xlbook.Worksheets(1)
   
    For i = 0 To DataGrid1.Columns.Count - 1
    For j = 0 To DataGrid1.ApproxCount - 1
   
    DataGrid1.Col = i
    On Error Resume Next
    DataGrid1.Row = j
   
    xlsheet.Cells(j + 1, i + 1) = DataGrid1.Columns.Item(i).Text
    Next j
    Next i
#9
zyh10312013-07-27 22:42
回复 5楼 lowxiong
斑竹 想请问下
为什么我datagrid导出到excel后 表头的内容却无法导出呢?
#10
bczgvip2013-07-28 16:28
不是已经用数据库的方式打开了么,直接用数据库的方式读取数据不就行了?
【HDR=YES】而且,“有头的啊!”
#11
zyh10312013-07-28 17:01
回复 10楼 bczgvip
额 斑竹没看清楚呀。。
我说的是导出excel的时候没有头呀
#12
lowxiong2013-07-28 17:20
好像ado打开excel会把第一行作为数据字段项,因此要反过来吧ado表格还原到excel(用excel.application引用)中,应该在fields(index).name中取出第一行信息吧。
#13
hjxlj2013-07-28 21:18
回复 8楼 zyh1031
已向你发送站内短消息,请注意查收!这里回帖我不知道怎么发图片,刚来论坛时间不长,有些操作还不是太清楚。

[ 本帖最后由 hjxlj 于 2013-7-28 21:28 编辑 ]
#14
zyh10312013-07-30 00:05
回复 12楼 lowxiong
斑竹 fields(index).name 是Recordset 的属性吧
可我没用到Recordset 。。我没有连接数据库。。就是直接读取的excel文件
#15
hjxlj2013-07-30 21:16
程序代码:
    Dim ex As Object
    Dim i As Integer
    Dim j As Integer
    Dim xlapp As Excel.Application
    Dim xlbook As Excel.Workbook
    Dim xlsheet As Excel.Worksheet
    Set xlapp = CreateObject("Excel.Application")
    xlapp.Visible = True
    Set xlbook = xlapp.Workbooks.Add
    Set xlsheet = xlbook.Worksheets(1)
'********************************************************************
    For i = 0 To DataGrid1.Columns.Count - 1
      xlssheet.Cells(1, i + 1).Value2 = DataGrid1.Columns(i).DataField
    Next i
'********************************************************************
    For j = 0 To DataGrid1.ApproxCount - 1
      For i = 0 To DataGrid1.Columns.Count - 1
        DataGrid1.Col = i
        On Error Resume Next
        DataGrid1.Row = j
        xlsheet.Cells(j + 2, i + 1) = DataGrid1.Columns.Item(i).Text
      Next i
    Next j
我已帮你修改了你的代码,特别注意*号之间的内容,是我添加的,其功能就是获取列头到你Excel表中去。另外你的代码逻辑上不是太清晰,所以我也做了改动。但由于我没有你代码中使用的数据库,所以代码我无法测试,我估计应该能够正常运行。只是你这问题点数居然为0,大哥,兄弟我也要吃饭的啊!
#16
zyh10312013-07-30 21:20
回复 15楼 hjxlj
真是 太感谢你了 朋友
因为很久没来论坛。发帖的时候也没看见哪里有点数。。。
所以着急就发出去了。。
现在想追加点数也没办法了。。。真心不是在乎点数
#17
hjxlj2013-07-30 21:45
回复 16楼 zyh1031
呵呵,玩笑而已。不过,如果问题解决了,就请及时结帖吧。
#18
zyh10312013-07-30 21:52
回复 17楼 hjxlj
可能因为是没有点数的原因。。
我找不到结贴的按钮
#19
hjxlj2013-07-30 21:54
回复 18楼 zyh1031
那等斑竹给你结吧,我也不知道该怎么结。因为,我还从未在这里问过问题。
1