找回密码
 加入
搜索
查看: 7167|回复: 14

[AU3基础] AU3对Excel的操作

  [复制链接]
发表于 2015-1-6 10:39:24 | 显示全部楼层 |阅读模式
刚学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",如何实现呢?
发表于 2015-1-6 11:06:55 | 显示全部楼层
看不懂。。。。。
 楼主| 发表于 2015-1-6 11:27:18 | 显示全部楼层
回复 2# netegg

额,是我表述的不清楚吧。

我想把excel里面(从第9行第7列开始,往下的整列数据),如果遇到单元格的数据是“A1-A3,C2-C6”这样的就拆分开,结果是“A1,A2,A3,C2,C3,C4,C5,C6”,如果数据中没有'-'这样的就保持原样。
发表于 2015-1-6 11:42:45 | 显示全部楼层
#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)
 楼主| 发表于 2015-1-6 13:55:20 | 显示全部楼层
回复 4# netegg

netegg, 感谢热心帮助,但是:
单元格里不只是‘A1-A3,C2-C6’,许多都是字母打头数字结尾的这种,需要用什么规律拆开呢?
发表于 2015-1-6 14:12:38 | 显示全部楼层
回复 5# xudaweb
那就看到底是什么形式了,这个不是这里讨论的问题,根据不同的格式,传递不同的格式过去就行了
 楼主| 发表于 2015-1-6 14:24:48 | 显示全部楼层
回复 6# netegg

现在棘手的是,没有规律,而且还很多,我总结的规律是:字母(单个、多个)+数字 (数字递增)!
例如: R1-R5,DS1-DS10,PU3-PU7

请问这个需要从哪个方向入手啊?谢谢~
发表于 2015-1-6 15:03:52 | 显示全部楼层
本帖最后由 netegg 于 2015-1-6 15:06 编辑

先拆成数组,然后对每个数组元素正则获取数字范围,并获取字符,和数字组合输出
发表于 2015-1-6 15:36:29 | 显示全部楼层
#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
剩下的自己去想
发表于 2015-1-6 16:37:38 | 显示全部楼层
本帖最后由 netegg 于 2015-1-6 16:49 编辑

[au3]#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
[/au3]用StringTrimRight($ret, 1)替换原数据
发表于 2015-1-6 19:33:20 | 显示全部楼层
稍等,还有点问题,C1-C3,C5-C6,C12这类的换不出来(最后一项是单个元素)
发表于 2015-1-6 19:43:38 | 显示全部楼层
本帖最后由 netegg 于 2015-1-6 19:49 编辑

[au3]#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
[/au3]行了

评分

参与人数 1金钱 +10 收起 理由
xudaweb + 10

查看全部评分

发表于 2015-1-6 21:02:12 | 显示全部楼层
我轻轻的来了
 楼主| 发表于 2015-1-8 15:30:33 | 显示全部楼层
回复 12# netegg


    正则表达式真心看不懂啊,先谢谢热心解答了,剩下的我再摸索摸索。
发表于 2015-1-11 18:55:00 | 显示全部楼层
回复 12# netegg


    蛋蛋好热心
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 19:15 , Processed in 0.084673 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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