floor6ggg 发表于 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],1) = '0' Then
                $str &=$arr[$i] &'|'
      Else
                $str &=$arr[$i] &','
      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

floor6ggg 发表于 2019-11-21 14:44


您这个方法效率确实很高,分组不满足我的需求呢,我要求是10个一组,剩余的分成一组。

floor6ggg 发表于 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列数据没有规则,所以不行的,具体麻烦看下新上传的附件,谢谢!

floor6ggg 发表于 2019-11-21 16:49:55

本帖最后由 floor6ggg 于 2019-11-21 16:57 编辑

风过无痕 发表于 2019-11-21 16:28
A列数据没有规则,所以不行的,具体麻烦看下新上传的附件,谢谢!
没有规律的话,那就上面的代码是真的不适合了。。。。只能老老实实的计数10个,没得取巧了。。。:face (32):

将判断末位为0的那一句,更改成计数达到10个的时候。。。。。这样的话和其他大大的代码就没有多大区别了。。。

chzj589 发表于 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 ").GetRows
Local $iRowsA = UBound($aArray, $UBOUND_ROWS)
;_ArrayDisplay($aArray, "显示")
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.Open("SELECT * FROM ")
$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

floor6ggg 发表于 2019-11-21 18:22:32

chzj589 发表于 2019-11-21 17:40
优点:速度快。

#AutoIt3Wrapper_UseX64 = n


大赞!好强的access!
思路不够宽,还真没想过从access着手。。。。。

风过无痕 发表于 2019-11-21 18:58:56

chzj589 发表于 2019-11-21 17:40
优点:速度快。

这执行效率,给跪了!
问题事件简述:
双十一快递没揽收包裹,导致店铺被罚,1W+多条记录让我去查揽收时间,我搞到今早2点,也没弄明白思路,今天早上醒了就去网上找了VBA,再用AU3处理,最后在10点之前,领导去见客户的时候弄出来了。

chzj589 发表于 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一下。学习中
页: 1 [2]
查看完整版本: (已解决)提取excel文件中的数据,按需求记录到ini文件中