zoukankan      html  css  js  c++  java
  • 用 AutoHotkey 批量从 Excel 取值和赋值

    不太爽的一点:从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("oleaccAccessibleObjectFromWindow", "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
    }
    
  • 相关阅读:
    构建之法读书笔记04
    团队冲刺06
    12.23——周总
    团队冲刺05
    团队冲刺04
    用户场景分析
    团队冲刺03
    返回一个二维数组中最大联通子数组的和
    团队冲刺02
    FFT/NTT基础题总结
  • 原文地址:https://www.cnblogs.com/hyaray/p/15489162.html
Copyright © 2011-2022 走看看