风过无痕 发表于 2019-11-21 01:27:26

(已解决)提取excel文件中的数据,按需求记录到ini文件中

本帖最后由 风过无痕 于 2019-11-21 19:00 编辑

如图所示,按需求将快递单号列提取到ini文件中,请大家帮帮忙吧,谢谢了!test.rar只是示例,快递单号.rar是完整数据


guland 发表于 2019-11-21 10:45:45

把楼上的稍微改了一下

#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\_IniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
Dim $a = 1, $b = 1, $c
For $i = 2 To $iRowsA
        $sResult = _ExcelReadCell($oWorkbook, $i, 2)
        $c &= $sResult & ","
        If $a = 10 Then
                IniWrite($sFilePath, "单号分组", "分组" & $b, $c)
                $a = 1
                $b += 1
                $c = ""
        EndIf
        If $i = $iRowsA Then IniWrite($sFilePath, "单号分组", "分组" & $b, $c)
        $a += 1
Next
_ExcelBookClose($oExcel)

chzj589 发表于 2019-11-21 10:30:14

风过无痕 发表于 2019-11-21 09:56
谢谢帮助,但是您的方法只是把数据提取出来了,并没有分组,生成快递单信息.txt文件。


Local $aArray = IniReadSection($sFilePath, "B")
Local $sComboTxt = '', $sComboTxt1 = '', $sRTXT
If Not @error Then
        For $i = 1 To $aArray
                For $i = 1 To 10;$aArray
                        $sRTXT = $aArray[$i]
                        If Not StringInStr($sComboTxt, $sRTXT) Then $sComboTxt &= $sRTXT & ','
                Next
                IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组1", $sComboTxt)
                If Not @error Then
                        For $i = $aArraya To $aArray
                                $sRTXT = $aArray[$i]
                                If Not StringInStr($sComboTxt1, $sRTXT) Then $sComboTxt1 &= $sRTXT & ','
                        Next
                        IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组2", $sComboTxt1)
                EndIf
        Next
EndIf

chzj589 发表于 2019-11-21 09:10:35


#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\_IniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
MsgBox(0, "", "行数" & $iRowsA)
Local $Z = 0
For $i = 1 To $iRowsA
        Local $sResult = _Excel_RangeRead($oWorkbook, Default, "B" & $i)
        IniWrite($sFilePath, "B", $Z, $sResult)
        $Z += 1
Next
_Excel_Close($oWorkbook)
_Excel_Close($oExcel)

风过无痕 发表于 2019-11-21 09:56:05

chzj589 发表于 2019-11-21 09:10


谢谢帮助,但是您的方法只是把数据提取出来了,并没有分组,生成快递单信息.txt文件。

chzj589 发表于 2019-11-21 10:43:50

风过无痕 发表于 2019-11-21 09:56
谢谢帮助,但是您的方法只是把数据提取出来了,并没有分组,生成快递单信息.txt文件。

可以直接写入

#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\_IniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
MsgBox(0, "", "行数" & $iRowsA)
Local $sComboTxt = '', $sComboTxt1 = ''
For $i = 2 To 12;$iRowsA
        Local $sResult = _Excel_RangeRead($oWorkbook, Default, "B" & $i)
        If Not StringInStr($sComboTxt, $sResult) Then $sComboTxt &= $sResult & ','
Next
IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组1", $sComboTxt)
For $i = 13 To $iRowsA
        Local $sResult = _Excel_RangeRead($oWorkbook, Default, "B" & $i)
        If Not StringInStr($sComboTxt1, $sResult) Then $sComboTxt1 &= $sResult & ','
Next
IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组2", $sComboTxt1)
_Excel_Close($oWorkbook)
_Excel_Close($oExcel)

chzj589 发表于 2019-11-21 11:05:23

guland 发表于 2019-11-21 10:45
把楼上的稍微改了一下

版本不一样,无法运行!
>运行 AU3Check (3.3.14.2) 检查代码.参数: D:\AutoIt3au3 文件: D:\AU3调试\Excel中图表\Excel_Chart\test\Excel读取INI.au3
"D:\AU3调试\Excel中图表\Excel_Chart\test\Excel读取INI.au3"(14,52) : 错误: _ExcelReadCell(): 未定义函数

风过无痕 发表于 2019-11-21 13:37:24

chzj589 发表于 2019-11-21 11:05
版本不一样,无法运行!
>运行 AU3Check (3.3.14.2) 检查代码.参数: D:\AutoIt3au3 文件: D:\AU3调 ...

用这个就行了。

风过无痕 发表于 2019-11-21 13:38:38

guland 发表于 2019-11-21 10:45
把楼上的稍微改了一下

谢谢帮助,我再自己想想办法把分组最后一个数字后面的“,”去掉

chzj589 发表于 2019-11-21 13:59:51

风过无痕 发表于 2019-11-21 13:37
用这个就行了。

版本:autoit3_x64.exe(3.3.14.2)
环境:WIN7 64位

#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\test.txt";@ScriptDir & "\_IniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
Dim $a = 1, $b = 1, $c
For $i = 2 To $iRowsA
        ;$sResult = _ExcelReadCell($oWorkbook, $i, 2)
        $sResulta = _Excel_RangeRead($oWorkbook, Default, "B" & 1)
        $sResult = _Excel_RangeRead($oWorkbook, Default, "B" & $i)
        $c &= $sResult & ","
        If $a = 10 Then
                IniWrite($sFilePath, $sResulta, "分组" & $b, $c)
                $a = 1
                $b += 1
                $c = ""
        EndIf
        If $i = $iRowsA Then IniWrite($sFilePath, $sResulta, "分组" & $b, $c)
        $a += 1
Next
MsgBox(0, "", "行数" & $iRowsA&@CRLF & $sResulta)
_Excel_Close($oExcel)

chzj589 发表于 2019-11-21 14:08:33

风过无痕 发表于 2019-11-21 13:38
谢谢帮助,我再自己想想办法把分组最后一个数字后面的“,”去掉

把分组最后一个数字后面的“,”去掉

#include <Excel.au3>
Global $sFilePath = @ScriptDir & "\test.txt";@ScriptDir & "\_IniLtest.ini"
Local $vara = @ScriptDir & "\test.xlsx"
$oExcel = ObjCreate("excel.application")
$oExcel.visible = 0;True
$oWorkbook = $oExcel.workbooks.open($vara)
Local $iRowsA = $oWorkbook.ActiveSheet.UsedRange.Rows.Count; ‘当前工作表中已使用的行数
Dim $a = 1, $b = 1, $c
For $i = 2 To $iRowsA
        ;$sResult = _ExcelReadCell($oWorkbook, $i, 2)
        $sResulta = _Excel_RangeRead($oWorkbook, Default, "B" & 1)
        $sResult = _Excel_RangeRead($oWorkbook, Default, "B" & $i)
        $c &= $sResult & ","
        Local $sString = StringTrimRight($c, 1) ; 删除字符串右起 1个字符.
        If $a = 10 Then
                IniWrite($sFilePath, $sResulta, "分组" & $b, $sString)
                $a = 1
                $b += 1
                $c = ""
        EndIf
        If $i = $iRowsA Then IniWrite($sFilePath, $sResulta, "分组" & $b, $sString)
        $a += 1
Next
MsgBox(0, $iRowsA, "写入完成" ,1)
_Excel_Close($oExcel)

风过无痕 发表于 2019-11-21 14:13:00

chzj589 发表于 2019-11-21 14:08
把分组最后一个数字后面的“,”去掉

谢谢,谢谢,万分感谢,问题完美解决!

chzj589 发表于 2019-11-21 14:27:47

风过无痕 发表于 2019-11-21 14:13
谢谢,谢谢,万分感谢,问题完美解决!

我这几天在整理以前的Excel与ListView列表互导修改,所以就顺手帮到你。

floor6ggg 发表于 2019-11-21 14:41:13

chzj589 发表于 2019-11-21 14:27
我这几天在整理以前的Excel与ListView列表互导修改,所以就顺手帮到你。

看界面好强大的说………………

floor6ggg 发表于 2019-11-21 14:43:07

不邀自来,我也来强答一波……………… 数组法……………… 借用楼上几位大大的代码和kevinch 大大的犀利代码
页: [1] 2
查看完整版本: (已解决)提取excel文件中的数据,按需求记录到ini文件中