找回密码
 加入
搜索
查看: 1921|回复: 2

[AU3基础] [已解决]什么都不变的情况下。为什么ExcelReadArray有时正常读取有时不正常?

[复制链接]
发表于 2013-2-15 12:23:07 | 显示全部楼层 |阅读模式
本帖最后由 cnergao 于 2013-2-17 12:31 编辑
#include <Excel.au3>
#include <Array.au3>
Dim $array[10] = ["中国", "美国", "日本", "英国", "德国", "意大利", "法国", "韩国", "俄罗斯", "印度"]
Local $I, $Y, $array, $aArray1
$sFilePath1 = "D:\AUTOIT_3.3.7.15.1\Test2.xls" ;该文件应该已存在
$oExcel = _ExcelBookOpen($sFilePath1)
$I = $oExcel.ActiveSheet.Range("A65535").End(-4162).Row
$aArray1 = _ExcelReadArray($oExcel, 1, 1, $I, 1, 0) ;从活动工作表的行或列创建一个数组垂直方向
If @error Then
        MsgBox(0, "", @error, 2)
Else
        $Y = 0
        Do
                If StringRegExp($aArray1[$Y], $array[0], 0) = 1 Then ;如果匹配写入分组号
                        _ExcelWriteCell($oExcel, 5, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[1], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 6, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[2], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 7, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[3], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 8, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[4], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 9, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[5], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 10, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[6], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 11, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[7], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 12, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[8], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 13, $Y + 1, 2)
                ElseIf StringRegExp($aArray1[$Y], $array[9], 0) = 1 Then
                        _ExcelWriteCell($oExcel, 14, $Y + 1, 2)
                Else
                        _ExcelWriteCell($oExcel, 1, $Y + 1, 2)
                EndIf
                $Y = $Y + 1
        Until $Y = $I
EndIf


这个代码没有任何错误吧?
为什么运行的时候第一次正常。接下来就会出现
D:\AUTOIT_3.3.7.15.1\Include\Excel.au3 (738) : ==> ??????(?????).:
$aArray[$xx] = $oExcel.Activesheet.Cells(($xx - $iIndexBase) + $iStartRow, $iStartColumn).Value
$aArray[$xx] = $oExcel.Activesheet.Cells(($xx - $iIndexBase) + $iStartRow, $iStartColumn)^ ERROR

这样的错误

test2.xls内容如下
简介
语言:<strong>中国<br /></strong>
语言:<strong>美国<br /></strong>
语言:<strong>日本<br /></strong>
语言:<strong>俄罗斯<br /></strong>
语言:<strong>英国<br /></strong>
语言:<strong>德国<br /></strong>
语言:<strong>法国<br /></strong>
语言:<strong>意大利<br /></strong>
语言:<strong>韩国<br /></strong>
语言:<strong>朝鲜<br /></strong>
语言:<strong>印度<br /></strong>
语言:<strong>南非<br /></strong>

实际操作数据有上万条左右。

试了很多次不知道是不是数组定义的问题。有时正常有出错。
然后换了一种思路已经搞定。希望对大家有帮助。答案在三楼
 楼主| 发表于 2013-2-15 21:36:48 | 显示全部楼层
有没有人碰到过类似的问题?
 楼主| 发表于 2013-2-17 12:26:39 | 显示全部楼层
#include <Excel.au3>
#include <Array.au3>
Local $I, $Y, $result, $aArray2,$aArray1
$sFilePath1 = "D:\AUTOIT_3.3.7.15.1\test3.xls" ;该文件应该已存在
$oExcel = _ExcelBookOpen($sFilePath1)
$I = $oExcel.ActiveSheet.Range("A65535").End(-4162).Row;获取数据总行数
For $Y=1 To $I
$aArray1=$oExcel.cells($Y,1).Value;获取A列第N行数据
$aArray2=$oExcel.cells($Y,2).Value;获取B列第N行数据
$result=StringRegExpReplace($aArray2, '<(?i)strong>(.*?)<(?i)b', '<strong>'&$aArray1&'<b');用A列数据替换B列指定字符串
$oExcel.cells($Y,2).Value=$result;把替换后的结果写入B列
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 11:31 , Processed in 0.078814 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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