heroxianf 发表于 2016-8-16 10:16:34

同时对多个数据匹配处理编译出错[已解决]

本帖最后由 heroxianf 于 2016-8-16 15:45 编辑

问题描述:单条测试的时候没有出现这个错误,加入FOR循环和读取EXCEL表格里的内容就编译出错了,请指点一下。



#include <Excel_new.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)

For $Row = 0 To UBound($ProdArray, 2)
        Local $aArray1 = StringRegExp($ProdArray[$Row + 1], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[$Row + 1], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[$Row + 1], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 and $b >= 0 and $c > 0
                        MsgBox(0, '', $ProdArray[$Row + 1] & '      ' & '结果是: 符合')
        EndSelect
Next



h20040606 发表于 2016-8-16 15:03:59

本帖最后由 h20040606 于 2016-8-16 15:11 编辑

回复 1# heroxianf


    autoit的数组是从0 开始的。$row的循环有问题啊。检查 24行开始的循环 (1)应当UBound($ProdArray, 2) - 1 (2)为什么$Row+1#include <Excel.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)

For $Row = 0 To UBound($ProdArray, 2) - 1
        Local $aArray1 = StringRegExp($ProdArray[$Row], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[$Row], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[$Row], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 And $b >= 0 And $c > 0
                        MsgBox(0, '', $ProdArray[$Row] & '      ' & '结果是: 符合')
        EndSelect
Next
_Excel_BookClose($oWorkbook, 0)
_Excel_Close($oExcel)

heroxianf 发表于 2016-8-16 15:32:30

回复 2# h20040606

在整理原有表格没有去掉原有表格第一行不是数据,所以加1处理了一下。我试试。

heroxianf 发表于 2016-8-16 15:44:53

谢谢指明数组问题,这样修改测试用例可以正常运行了。接着折腾下一步了。

    #include <Excel_new.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)
MsgBox(0, '', $ProdArray)

For $Row = 0 To UBound($ProdArray, 2) - 1
        Local $aArray1 = StringRegExp($ProdArray[$Row], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[$Row], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[$Row], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 and $b >= 0 and $c > 0
                        MsgBox(0, '', $ProdArray[$Row] & '      ' & '结果是: 符合', 1)
        EndSelect
Next

MsgBox(0, '', 'Over')
页: [1]
查看完整版本: 同时对多个数据匹配处理编译出错[已解决]