ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用 AutoHotkey 批量从 Excel 取值和赋值

2021-10-31 14:01:40  阅读:491  来源: 互联网

标签:return AutoHotkey arrA delete0 Excel num 取值 ptr


不太爽的一点:从Excel取值,整数后面会加上 .0,一直没好的处理方法!只能用 delete0 函数进行二次加工

直接上 AutoHotkey v2-beta 的示例代码

xl := ox()
st := xl.ActiveSheet
;赋值
rs := 3 ;行数
cs := 2 ;列数
;要用 ComObjArray 创建二维数组
arrA := ComObjArray(12, rs, cs)
arrA[0, 0] := 1 ;NOTE 下标从0开始
arrA[0, 1] := 2
arrA[1, 0] := 3
arrA[1, 1] := 4
arrA[2, 0] := 5
arrA[2, 1] := 6
;值写到同大小区域的单元格中
st.range("A1:B3").value := arrA

;取值(TODO 由于vba机制,这种取值,整数后面会有 .0,所以要专门用 delete0 函数数理)
arrV := st.range("A1:B3").value ;NOTE 下标从1开始
vA2 := delete0(arrV[1,1])
vB4 := delete0(arrV[3,2])
msgbox(vA2 . "`n" . vB4)

ox(winTitle:="ahk_class XLMAIN") {
    if WinExist(winTitle)
        ctlID := ControlGetHwnd("EXCEL71")
    else
        return ComObject("Excel.application")
    numput('Int64',0x20400, 'Int64',0x46000000000000C0, IID_IDispatch:=buffer(16))
    dllcall("oleacc\AccessibleObjectFromWindow", "ptr",ctlID, "uint",0xFFFFFFF0, "ptr",IID_IDispatch, "ptr*",win:=ComValue(9,0), 'HRESULT')
    loop {
        try
            return win.application
        catch
            ControlSend("{escape}", "EXCEL71")
    }
}

delete0(num) {
    if (num ~= "^-?\d+\.\d+$") {
        if (num ~= "\.\d{8,}$") ;小数位太多的异常
            num := round(num+0.00000001, 6)
        return rtrim(RegExReplace(num, "\.\d*?\K0+$"), ".")
    } else
        return num
}

标签:return,AutoHotkey,arrA,delete0,Excel,num,取值,ptr
来源: https://www.cnblogs.com/hyaray/p/15489162.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有