AU3对Excel的操作
刚学AutoIT,有个疑问请教大家:想实现从第9行第7列开始,读取下面整列数据,下面这个代码能实现。
$aArray = _ExcelReadSheetToArray($oExcel, 9, 7, 0, 1) ;从第9行第7列开始,读取这一列
_ArrayDisplay($aArray, "读取1列")
如果我想把单元格中原本是类似与"C1-C3,C5-C6,C12"这样的数据替换成"C1,C2,C3,C5,C6,C12",如何实现呢? 看不懂。。。。。 回复 2# netegg
额,是我表述的不清楚吧。
我想把excel里面(从第9行第7列开始,往下的整列数据),如果遇到单元格的数据是“A1-A3,C2-C6”这样的就拆分开,结果是“A1,A2,A3,C2,C3,C4,C5,C6”,如果数据中没有'-'这样的就保持原样。 #Include <Excel.au3>
#Include <Array.au3>
$aArray = _ExcelReadSheetToArray($oExcel, 9, 7)
$iIndex =_ArraySearch($aArray, 'A1-A3,C2-C6', 0, 0, 0, 1, $sColumn)
_ExcelWriteCell($oExcel, 'A1,A2,A3,C2,C3,C4,C5,C6', $iIndex,$sColumn) 回复 4# netegg
netegg, 感谢热心帮助,但是:
单元格里不只是‘A1-A3,C2-C6’,许多都是字母打头数字结尾的这种,需要用什么规律拆开呢? 回复 5# xudaweb
那就看到底是什么形式了,这个不是这里讨论的问题,根据不同的格式,传递不同的格式过去就行了 回复 6# netegg
现在棘手的是,没有规律,而且还很多,我总结的规律是:字母(单个、多个)+数字 (数字递增)!
例如: R1-R5,DS1-DS10,PU3-PU7
请问这个需要从哪个方向入手啊?谢谢~ 本帖最后由 netegg 于 2015-1-6 15:06 编辑
先拆成数组,然后对每个数组元素正则获取数字范围,并获取字符,和数字组合输出 #include<string.au3>
#include<array.au3>
Local $str = 'R1-R5,DS1-DS10,PU3-PU7'
$aStr = StringSplit($str, ',', 2)
For $t = 0 To UBound($aStr) - 1
$b = StringRegExp($aStr[$t], '\D+', 3)
$a = StringRegExp($aStr[$t], '\d+', 3)
For $i = 0 To UBound($b) - 1 Step 2
ConsoleWrite($b[$i] & @CRLF)
Next
For $i = 0 To UBound($a) - 1
ConsoleWrite($a[$i] & @CRLF)
Next
Next
剩下的自己去想 本帖最后由 netegg 于 2015-1-6 16:49 编辑
#include<string.au3>
#include<array.au3>
msgbox (0,0,replace('R1-R5,DS1-DS10,PU3-PU7'))
Func replace($str)
Local $ret
$aStr = StringSplit($str, ',', 2)
For $t = 0 To UBound($aStr) - 1
$b = StringRegExp($aStr[$t], '\D+', 3)
$a = StringRegExp($aStr[$t], '\d+', 3)
For $i = 0 To UBound($b) - 1 Step 2
For $j = 0 To UBound($a) - 1 Step 2
For $k = Number($a[$j]) To Number($a[$j + 1])
$ret &= $b[$i] & $k & ','
Next
Next
Next
Next
return StringTrimRight($ret, 1)
endfunc
用StringTrimRight($ret, 1)替换原数据 稍等,还有点问题,C1-C3,C5-C6,C12这类的换不出来(最后一项是单个元素) 本帖最后由 netegg 于 2015-1-6 19:49 编辑
#include<string.au3>
#include<array.au3>
MsgBox(0, 0, replace('C1-C3,C5-C6,C12'))
Func replace($str)
Local $ret
$aStr = StringSplit($str, ',', 2)
For $t = 0 To UBound($aStr) - 1
$b = StringRegExp($aStr[$t], '\D+', 3)
$a = StringRegExp($aStr[$t], '\d+', 3)
For $i = 0 To UBound($b) - 1 Step 2
For $j = 0 To UBound($a) - 1 Step 2
If UBound($a) = 1 Then
$ret &= $b[$i] & $a[$j] & ','
Else
For $k = Number($a[$j]) To Number($a[$j + 1])
$ret &= $b[$i] & $k & ','
Next
EndIf
Next
Next
Next
Return StringTrimRight($ret, 1)
EndFunc ;==>replace
行了 我轻轻的来了 回复 12# netegg
正则表达式真心看不懂啊,先谢谢热心解答了,剩下的我再摸索摸索。 回复 12# netegg
蛋蛋好热心
页:
[1]
2