|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 桶哥 于 2018-1-26 11:55 编辑
公司采购部的采购订单是用excel表格做的,没有采购系统的支持,采购部一共6个采购员,数据非常得乱,一直以来,商品的采购价格都很难搞清除,想了很多办法,提取每张表格的商品信息。1、vba打开excel读取excel文件,这种方法需要打开excel表格,不是很方便。2、利用python读取excel,这种方法是最方便,不得不说python写这样的代码真心方便,但是部门里其他人都不会操作。能不能还是用vba读取excel表格,但是不打开excel表格,经过n天的努力,终于实现,第一次发帖,希望各位大佬多多指教。
Sub 读取Excel文件() 'ado方式读取excel文件
Dim ar, arr '定义动态数组
Dim RowMax, Row, row1, RowMax1
Dim conn, rs, SQL$, table$, table1$, SQL1$
Dim tiaoma$, num%
Set conn = CreateObject("adodb.connection") '创建connection对象连接excel,其实一直不太能搞懂connection和recordset。。。。。
Set rs = CreateObject("adodb.recordset") ’创建一个recordset对象,看到论坛里很多小伙伴读取数据都是用connection,刚开始我也是这么干
但是,我需要读取的订单文件不是标准的数据库文件,都不知道怎么用sql语句支持,后来采用的recordset对象,因为recordset有一个getrows的方法
tiaoma = Format(Sheets("Sheet1").Cells(2, 7), "0000000000000000") ’这一句的意思是在Cells(2, 7)表格输入需要查询的条形码,之所以用Format转化数据格式,因为采购做的订单里,有些条形码前面有一个0,但是公司的采购不会设置数据格式,所以干脆就统一位数
mypath = "\\Sfgj\******\*******\******\订单\" '文件路径
myfile = Dir(mypath & "*.xls") '获取文件名
num = 1
Do While myfile <> ""
conn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=no;imex=1';Data Source = " & mypath & myfile
‘connection打开excel文件,创建连接
table = "[订单导航页$]" ‘表的名称,这里这张表是订单的第一张表,里面存放着各个表的名称,话说,哪 位大佬教一下怎么用ado获取表的名称啊
SQL = "select * from " & table
rs.Open SQL, conn, 1, 1
ar = rs.getrows ’将表格数据放入到一个数组,这是我觉的这个方法的核心是吧表格数据转化程数 组数据进行分析
rs.Close
RowMax = UBound(ar, 2) ‘这个函数用于获取数值的下标,
For Row = 1 To RowMax '提取table名称,这一步其实比较蛋疼,因为我不会直接读取sheets的名称。。。。。
If ar(0, Row) <> "" Then
table1 = "[" & ar(0, Row) & "$]"
SQL1 = "select * from " & table1
rs.Open SQL1, conn, 1, 1
arr = rs.getrows
rs.Close
RowMax1 = UBound(arr, 2) '从这里开始就是对每张表里的数据进行提取,
For row1 = 14 To RowMax1 '提取row数据,之所以是row1=14,因为每张表格从第15行开始就是商品数据
If tiaoma = Format(arr(2, row1), "0000000000000000") Then ’format保证格式统一,然后循环写入到制定的单元格
Sheets("Sheet1").Cells(num + 1, 1) = arr(2, row1) '货号
Sheets("Sheet1").Cells(num + 1, 2) = arr(5, row1) '采购单价
Sheets("Sheet1").Cells(num + 1, 3) = arr(6, row1) '采购数量"
Sheets("Sheet1").Cells(num + 1, 4) = arr(1, 4) '供应商名称
Sheets("Sheet1").Cells(num + 1, 5) = arr(11, 8) '税点
Sheets("Sheet1").Cells(num + 1, 6) = ar(0, Row) '日期
num = num + 1
End If
Next
End If
Next
conn.Close '关闭数据连接
myfile = Dir
Loop
MsgBox "查询完毕"
Set conn = Nothing '释放内存
Set rs = Nothing
End Sub
|
评分
-
1
查看全部评分
-
|