找回密码
 加入
搜索
楼主: 风过无痕

[网络通信] (已解决)提取excel文件中的数据,按需求记录到ini文件中

[复制链接]
发表于 2019-11-21 14:44:35 | 显示全部楼层
本帖最后由 floor6ggg 于 2019-11-21 14:54 编辑
#include <Excel.au3>
#include <Array.au3>
Global $sFilePath = @ScriptDir & "\_myIniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)

with $oWorkbook.worksheets("Sheet1")
        $arr=.range("a1").currentregion.value
        $arr = .application.transpose($arr) ;转置
        .parent.close(false)
EndWith
;_ArrayDisplay($arr)

$str=''
For $i = 1 To UBound($arr)-1
        If stringright($arr[$i][0],1) = '0' Then
                $str &=$arr[$i][1] &'|'
        Else
                $str &=$arr[$i][1] &','
        EndIf
next
$str=stringleft($str,stringlen($str)-1)  ;去除尾部的,号   ;才发现更简单的写法:StringTrimRight($c, 1) ; 删除字符串右起 1个字符.!!!!

$brr=StringSplit($str,'|')
for $i= 1 to UBound($brr)-1
        IniWrite($sFilePath, "单号分组", "分组" & $i, $brr[$i])
Next

 楼主| 发表于 2019-11-21 16:05:45 | 显示全部楼层

您这个方法效率确实很高,分组不满足我的需求呢,我要求是10个一组,剩余的分成一组。
发表于 2019-11-21 16:15:09 | 显示全部楼层
本帖最后由 floor6ggg 于 2019-11-21 16:17 编辑

取巧的写法,按照A列数据末位为0来进行分组,应该是可以实现10个为一组,余下为一组。
 楼主| 发表于 2019-11-21 16:28:24 | 显示全部楼层
floor6ggg 发表于 2019-11-21 16:15
取巧的写法,按照A列数据末位为0来进行分组,应该是可以实现10个为一组,余下为一组。

A列数据没有规则,所以不行的,具体麻烦看下新上传的附件,谢谢!
发表于 2019-11-21 16:49:55 | 显示全部楼层
本帖最后由 floor6ggg 于 2019-11-21 16:57 编辑
风过无痕 发表于 2019-11-21 16:28
A列数据没有规则,所以不行的,具体麻烦看下新上传的附件,谢谢!

没有规律的话,那就上面的代码是真的不适合了。。。。只能老老实实的计数10个,没得取巧了。。。

将判断末位为0的那一句,更改成计数达到10个的时候。。。。。这样的话和其他大大的代码就没有多大区别了。。。
发表于 2019-11-21 17:40:26 | 显示全部楼层
本帖最后由 chzj589 于 2019-11-21 18:11 编辑
风过无痕 发表于 2019-11-21 16:05
您这个方法效率确实很高,分组不满足我的需求呢,我要求是10个一组,剩余的分成一组。

优点:速度快。

#AutoIt3Wrapper_UseX64 = n
#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\testA.txt"
Local $vara = @ScriptDir & "\快递单号.xlsx"
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $vara & ";Extended Properties='Excel 12.0'")
$aArray = $addfld.Execute("SELECT * FROM [Sheet1$]").GetRows
Local $iRowsA = UBound($aArray, $UBOUND_ROWS)
;_ArrayDisplay($aArray, "显示")
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.Open("SELECT * FROM [Sheet1$]")
$sResult1 = $RS.Fields(1).value
Dim $a = 2, $b = 1, $c
For $i = 2 To $iRowsA
        $sResult = $RS.Fields(1).value
        $RS.movenext
        $c &= $sResult & ","
        Local $sString = StringTrimRight($c, 1)
        If $a = 11 Then
                IniWrite($sFilePath, "快递单号", "分组" & $b, $sString)
                $a = 1
                $c = ""
                $b += 1
        EndIf
        If $i = $iRowsA Then IniWrite($sFilePath, "快递单号", "分组" & $b, $sString)
        $a += 1
Next
MsgBox(0, $iRowsA&"  行", "写入完成", 1)
$RS.close
$addfld.Close
发表于 2019-11-21 18:22:32 | 显示全部楼层
chzj589 发表于 2019-11-21 17:40
优点:速度快。
[au3]
#AutoIt3Wrapper_UseX64 = n

大赞!好强的access!
思路不够宽,还真没想过从access着手。。。。。
 楼主| 发表于 2019-11-21 18:58:56 | 显示全部楼层

这执行效率,给跪了!
问题事件简述:
双十一快递没揽收包裹,导致店铺被罚,1W+多条记录让我去查揽收时间,我搞到今早2点,也没弄明白思路,今天早上醒了就去网上找了VBA,再用AU3处理,最后在10点之前,领导去见客户的时候弄出来了。
发表于 2019-11-22 09:35:42 | 显示全部楼层
风过无痕 发表于 2019-11-21 18:58
这执行效率,给跪了!
问题事件简述:
双十一快递没揽收包裹,导致店铺被罚,1W+多条记录让我去查揽收时 ...

把Excel文件当作数据库,设定编号或日期,搞个查询不就简单了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2019-11-26 21:14:43 | 显示全部楼层
我也来占个位
lhl98 该用户已被删除
发表于 2020-1-15 15:57:26 | 显示全部楼层
好东西,先Mark一下。学习中
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 08:54 , Processed in 0.071358 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表