找回密码
 加入
搜索
查看: 6560|回复: 25

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

[复制链接]
发表于 2019-11-21 01:27:26 | 显示全部楼层 |阅读模式
本帖最后由 风过无痕 于 2019-11-21 19:00 编辑

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


本帖子中包含更多资源

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

×
发表于 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)
发表于 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[0][0]
                For $i = 1 To 10;$aArray[0][0]
                        $sRTXT = $aArray[$i][1]
                        If Not StringInStr($sComboTxt, $sRTXT) Then $sComboTxt &= $sRTXT & ','
                Next
                IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组1", $sComboTxt)
                If Not @error Then
                        For $i = $aArraya[11][0] To $aArray[0][0]
                                $sRTXT = $aArray[$i][1]
                                If Not StringInStr($sComboTxt1, $sRTXT) Then $sComboTxt1 &= $sRTXT & ','
                        Next
                        IniWrite(@ScriptDir & "\test.txt", "快递单号", "分组2", $sComboTxt1)
                EndIf
        Next
EndIf
发表于 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 | 显示全部楼层

谢谢帮助,但是您的方法只是把数据提取出来了,并没有分组,生成快递单信息.txt文件。
发表于 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)
发表于 2019-11-21 11:05:23 | 显示全部楼层
guland 发表于 2019-11-21 10:45
把楼上的稍微改了一下

版本不一样,无法运行!
>运行 AU3Check (3.3.14.2) 检查代码.  参数: D:\AutoIt3  au3 文件: 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:\AutoIt3  au3 文件: D:\AU3调 ...

用这个就行了。

本帖子中包含更多资源

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

×
 楼主| 发表于 2019-11-21 13:38:38 | 显示全部楼层
guland 发表于 2019-11-21 10:45
把楼上的稍微改了一下

谢谢帮助,我再自己想想办法把分组最后一个数字后面的“,”去掉
发表于 2019-11-21 13:59:51 | 显示全部楼层

版本: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)
发表于 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
把分组最后一个数字后面的“,”去掉

谢谢,谢谢,万分感谢,问题完美解决!
发表于 2019-11-21 14:27:47 | 显示全部楼层
风过无痕 发表于 2019-11-21 14:13
谢谢,谢谢,万分感谢,问题完美解决!

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

本帖子中包含更多资源

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

×
发表于 2019-11-21 14:41:13 | 显示全部楼层
chzj589 发表于 2019-11-21 14:27
我这几天在整理以前的Excel与ListView列表互导修改,所以就顺手帮到你。

看界面好强大的说………………
发表于 2019-11-21 14:43:07 | 显示全部楼层
不邀自来,我也来强答一波……………… 数组法……………… 借用楼上几位大大的代码  和  kevinch 大大的犀利代码
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 10:13 , Processed in 0.085899 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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