找回密码
 加入
搜索
查看: 2359|回复: 6

[AU3基础] EXCEL复制区域数据如何转换成二维数组?求教

  [复制链接]
发表于 2019-5-4 15:09:49 | 显示全部楼层 |阅读模式
复制EXCEL数据到剪切板,多行多列有StringSplit不行,可有其他可用函数或方法么?
发表于 2019-5-4 23:42:53 | 显示全部楼层
本帖最后由 zghwelcome 于 2019-5-5 09:15 编辑


#include <array.au3>


Local $sClipData = ClipGet()
Local $aAry = _ClipData_ToArray($sClipData)
If Not @error Then _ArrayDisplay($aAry)


Func _ClipData_ToArray($sClipData)
        Local $aReg, $sEveryLine, $aSplit
        If $sClipData = '' Then Return SetError(1)
        $aReg = StringRegExp($sClipData, '\V+', 3)
        If @error Then Return SetError(2)
        Local $aAry_Ret[UBound($aReg)][1]
        For $i = 0 To UBound($aReg) - 1
                $sEveryLine = $aReg[$i] 
                $aSplit = StringSplit($sEveryLine, BinaryToString('0x09',4), 1) ;//里面的tab符发论坛变多个空格了
                If Not @error Then
                        If $aSplit[0] > UBound($aAry_Ret, 2) Then ReDim $aAry_Ret[UBound($aReg)][$aSplit[0]]
                        For $j = 0 To $aSplit[0] - 1
                                $aAry_Ret[$i][$j] = $aSplit[$j + 1]
                        Next
                Else
                        $aAry_Ret[$i][0] = $sEveryLine
                EndIf
        Next
        Return $aAry_Ret
EndFunc   ;==>_ClipData_ToArray


 楼主| 发表于 2019-5-5 08:33:35 | 显示全部楼层
上面代码不行
 楼主| 发表于 2019-5-5 14:22:18 | 显示全部楼层


找到原因了,遇到单元格内有换行符的怎么解决?

本帖子中包含更多资源

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

×
发表于 2019-5-5 16:02:43 | 显示全部楼层
$sClipData = StringRegExpReplace($sClipData,'\v+$','') & @CRLF
$aReg = StringRegExp($sClipData, '(?s).+?(?=\r\n)', 3)



 楼主| 发表于 2019-5-5 16:12:11 | 显示全部楼层
虽然正则还是看不太懂。。。但问题已完美解决,相当的帅~~
发表于 2019-9-27 17:02:55 | 显示全部楼层
直接就可以读入数组
#include <array.au3>

$oexcel=ObjCreate("excel.application")
$oexcel.visible=True
$xls=$oexcel.workbooks.add
With $xls.activesheet
        For $r=1 To 10
                For $c=1 To 6
                        .cells($r,$c).value=Random(1,99,1)
                Next
        Next
        .range("b2:d8").interior.colorindex=6
        $arr=.range("b2:d8").value
        _ArrayDisplay($arr)
        .range("b12").resize(UBound($arr,2),UBound($arr)).value=$arr
EndWith
MsgBox(0,"","注意数组行列与Excel是反的")
只不过要注意,行列与excel是反的,写入时也同理
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 09:53 , Processed in 0.141828 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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