注册 登录
编程论坛 VB6论坛

按条件导入Excel 数据到 listbox ??

newsoftware 发布于 2017-07-25 00:22, 4096 次点击
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录



本人想按条件导入Excel 数据到 listbox中,不知代码怎样写? 求大神帮助!

条件如下(VB操作):
1、GP9列筛选非空项
2、筛选后编号列为升序排序
3、提取Orders列的后3位数导入到VB的listbox
13 回复
#2
xiangyue05102017-07-25 08:45
SQL 查询语句

Select right(Orders,3) as NewID from [表名] where GP9<> "" Order by NewID  

没有用过excel来建立数据连接,也不清楚你这个是否满足SQL查询的格式。
如果是直接创建excel对象进行操作的话,就是简单的循环、判断以及字符串处理, 结果放在一个动态数组中,没有什么难的。
你自己先试着写代码,遇到具体的问题再来问。除非你什么都不懂,就是来求作业的。
#3
ZHRXJR2017-07-25 11:38
下面是代码,应该是这样的:
程序代码:
Dim cnn As New ADODB.Connection, RS As New ADODB.Recordset
List1.Clear
cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & App.Path & "\Excel表.xlsx"   'Excel表连接语句,Excel的文件名称自己修改
Sql = "select * from [Sheet1] Where GP9<>"" Order BY 编号"   'GP9列筛选非空项,筛选后编号列为升序排序
    RS.Open Sql, cnn, 3, 2    '打开工作表
    Do While Not RS.EOF
        List1.AddItem Right(RS!Orders, 3)    '提取Orders列的后3位数导入到VB的listbox
    RS.MoveNext
    Loop
    RS.Close
cnn.Close
#4
newsoftware2017-07-26 00:01
回复 2楼 xiangyue0510
版主好!

本人在读书时自学了一点VB,现因工作经常要大量处理上述的Excel文件,写了以下代码,只能导入具体的单元格,不知上述的条件要怎么写代码?还请版主指教,感谢!感谢!!


Private Sub Command1_Click()
On Error GoTo err
Dim Xls, Xlsbook, Xlssheet
    Set Xls = CreateObject("Excel.Application")
    Xls.Visible = False '
    CommonDialog1.ShowOpen
    Set Xlsbook = Xls.Workbooks.Open(CommonDialog1.FileName) '打开共公对话框,按“取消”也会导入上次导入的文件,不知是什么原因?也请版主帮忙修改,感谢了
    Set Xlssheet = Xlsbook.Worksheets(1) '
    Xlssheet.Activate '
    List1.AddItem Xlssheet.Cells(4, 2) '只会导入具体的单元格,按条件不知要怎么写代码?还请帮忙
    Xls.Quit
    Set Xlssheet = Nothing
    Set Xlsbook = Nothing
    Set Xls = Nothing
   
err:
Exit Sub
End Sub
#5
newsoftware2017-07-26 00:08
回复 3楼 ZHRXJR
感谢!

提示以下错误,不知是什么原因?


只有本站会员才能查看附件,请 登录
#6
xiangyue05102017-07-26 08:56
以下是引用newsoftware在2017-7-26 00:08:50的发言:

感谢!

提示以下错误,不知是什么原因?

你没有添加adodb的引用吧
#7
xiangyue05102017-07-26 09:06
以下是引用newsoftware在2017-7-26 00:01:41的发言:

版主好!

本人在读书时自学了一点VB,现因工作经常要大量处理上述的Excel文件,写了以下代码,只能导入具体的单元格,不知上述的条件要怎么写代码?还请版主指教,感谢!感谢!!


Private Sub Command1_Click()
On Error GoTo err
Dim Xls, Xlsbook, Xlssheet
    Set Xls = CreateObject("Excel.Application")
    Xls.Visible = False '
    CommonDialog1.ShowOpen
    Set Xlsbook = Xls.Workbooks.Open(CommonDialog1.FileName) '打开共公对话框,按“取消”也会导入上次导入的文件,不知是什么原因?也请版主帮忙修改,感谢了
    Set Xlssheet = Xlsbook.Worksheets(1) '
    Xlssheet.Activate '
    List1.AddItem Xlssheet.Cells(4, 2) '只会导入具体的单元格,按条件不知要怎么写代码?还请帮忙
    Xls.Quit
    Set Xlssheet = Nothing
    Set Xlsbook = Nothing
    Set Xls = Nothing
   
err:
Exit Sub
End Sub

基础太不扎实了,你的代码其实基本都已经实现了,只不过需要添加一个循环和判断而已, 循环和判断可以说是VB最基本的东西。
这段代码估计都不是你自己写的吧
程序代码:

Private Sub Command1_Click()
On Error GoTo err
Dim Xls, Xlsbook, Xlssheet
    Set Xls = CreateObject("Excel.Application")
    Xls.Visible = False '
    CommonDialog1.FileName=""      '清除上次的记录
    CommonDialog1.ShowOpen
    if CommonDialog1.FileName="" then exit sub '没有指定文件,退出sub
    Set Xlsbook = Xls.Workbooks.Open(CommonDialog1.FileName) '打开共公对话框,按“取消”也会导入上次导入的文件,不知是什么原因?也请版主帮忙修改,感谢了
    Set Xlssheet = Xlsbook.Worksheets(1) '
    Xlssheet.Activate '
   
    N1=3   '根据你的截图是从第三行开始的
    N2=10  '上限自己修改,或者给一个很大的数,在循环体中通过判断退出循环也可以
    for i = N1 to N2
    if Xlssheet.Cells(4, 7)<>"" then List1.AddItem right(Xlssheet.Cells(4, 2) ,3)
    next i

    Xls.Quit
    Set Xlssheet = Nothing
    Set Xlsbook = Nothing
    Set Xls = Nothing
   
err:
Exit Sub
End Sub
#8
newsoftware2017-07-26 23:54
回复 7楼 xiangyue0510
感谢版主回复!版主讲得太对了,很多东西都还给老师了,知识真的是用时方恨少呀!

但还要以下的第2个条件:“编号列为升序排序”时再导入,现导入的顺序与我想要的不一样,还请版主再指教? 感谢了。

条件如下(VB操作):
1、GP9列筛选非空项
2、筛选后编号列为升序排序
3、提取Orders列的后3位数导入到VB的listbox


现导入的顺序与我想要的不一样,如下图:

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


PS:
 if Xlssheet.Cells(i, 7)<>"" then List1.AddItem right(Xlssheet.Cells(i, 2) ,3)

[此贴子已经被作者于2017-7-26 23:56编辑过]

#9
newsoftware2017-07-27 00:09
回复 6楼 xiangyue0510
找不到呀?是不是要安装的?就像是office excel 的引用一样。

只有本站会员才能查看附件,请 登录
#10
ZHRXJR2017-07-27 07:12
回复 5楼 newsoftware
感谢!

提示以下错误,不知是什么原因?

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

添加这二个引用,就可以了。

[此贴子已经被作者于2017-7-27 07:14编辑过]

#11
xiangyue05102017-07-27 08:58
以下是引用newsoftware在2017-7-26 23:54:02的发言:

感谢版主回复!版主讲得太对了,很多东西都还给老师了,知识真的是用时方恨少呀!

但还要以下的第2个条件:“编号列为升序排序”时再导入,现导入的顺序与我想要的不一样,还请版主再指教? 感谢了。

条件如下(VB操作):
1、GP9列筛选非空项
2、筛选后编号列为升序排序
3、提取Orders列的后3位数导入到VB的listbox


现导入的顺序与我想要的不一样,如下图:



PS:
 if Xlssheet.Cells(i, 7)<>"" then List1.AddItem right(Xlssheet.Cells(i, 2) ,3)

还的够干净的,感觉你是一点不留
需要排序的话先把这些编号放在一个动态数组中,然后排序,最后放进list中
动态数组这个给你一段代码,排序这个自己研究一下。
dim nums()
dim k as integer
for i = N1 to N2
    if Xlssheet.Cells(4, 7)<>"" then
     'List1.AddItem right(Xlssheet.Cells(4, 2) ,3)
     redim preserve nums(k)     'preserve 很重要,在改变数组上限的时候不清空原来的数据,要不就相当于重新定义一个数组,都是空的
     nums(k)=right(Xlssheet.Cells(4, 2) ,3)
     k=k+1
    end if
 next i

next
#12
newsoftware2017-07-27 21:52
以下是引用ZHRXJR在2017-7-27 07:12:32的发言:



添加这二个引用,就可以了。


已引用,出现以下错误提示,不知是否安装的问题 ?。。。。

只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#13
newsoftware2017-07-27 22:07
以下是引用xiangyue0510在2017-7-27 08:58:55的发言:


还的够干净的,感觉你是一点不留
需要排序的话先把这些编号放在一个动态数组中,然后排序,最后放进list中
动态数组这个给你一段代码,排序这个自己研究一下。
dim nums()
dim k as integer
for i = N1 to N2
    if Xlssheet.Cells(4, 7)<>"" then
     'List1.AddItem right(Xlssheet.Cells(4, 2) ,3)
     redim preserve nums(k)     'preserve 很重要,在改变数组上限的时候不清空原来的数据,要不就相当于重新定义一个数组,都是空的
     nums(k)=right(Xlssheet.Cells(4, 2) ,3)
     k=k+1
    end if
 next i

next


我是菜鸟,这代码看不懂

我是说要按“编号”列升序的顺序来导入数据,就是如下图所示的顺序,但不是在excel 操作,而是要在VB操作。这代码感觉是用导入的数据来排序。。。

只有本站会员才能查看附件,请 登录
#14
ZHRXJR2017-07-27 22:55
回复 12楼 newsoftware
cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & App.Path & "\Excel表.xlsx"
这个是Excel 2007 以上版本的驱动程序,你系统中安装的是那个版本的Office,有可能是没有 ACE.OLEDB.12.0 的驱动引起的。
要不然换成2003的Excel:
cnn.Open  "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=false;Data Source=" & App.Path & "\Excel表.xls;Extended Properties='Excel 8.0;HDR=Yes'"
注意,扩展名必须是 *.xls,不是 *.xlsx 。

[此贴子已经被作者于2017-7-27 22:58编辑过]

1