AutoHotkey的函数对象的Bind方法绑定参数的应用

Posted hyaray

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AutoHotkey的函数对象的Bind方法绑定参数的应用相关的知识,希望对你有一定的参考价值。

近期在写Excel数据批处理函数,想提取某列的每个数据是否匹配某某条件的所有单元格。

这种需求比较多,比如判断的值有:单元格值字体颜色单元格颜色等等,

判断条件有:相同不同正则,或在某多行字符串内等。

如果都写出来,可能会有N个函数,所以想统一用一个函数来循环,判断条件则用传入的函数来区分。

本文主要判断的是:判断某列数据是否和在多行字符串内。

比如我把产品的货号存到记事本文件(记事本文件相对固定,如果复制到当前Excel表的某列也可以),

然后判断单元格的货号是否和记事本内容匹配,这样就能提取出所有的单元格并存到arr供后面环节使用

rng := ComObjActive("Excel.Application").ActiveSheet.Range("A1:A20")
  fun := Func("getLine").Bind(strFromTxt) ;核心,把函数getLine的第一个参数固定(strFromTxt用FileRead获取)
  arrRes := loopCheckValueByFunc(rng, fun)
  
   getLine(str1, str2) ;被判断的str1放第一个参数,可被Bind固定
  {
    Loop Parse, str1, "`n", "`r"
    {
      If (A_LoopField = str2)
        Return A_Index
    }
  }

  ;遍历rng,找到符合函数条件的单元格
    loopCheckValueByFunc(rng, funcObj, condition:=True)
    {
        xl := rng.Application
        xl.ScreenUpdating := False
        arr := []
        For cellLoop In rng
        {
       ;核心语句,每次循环,只需要传入当前单元格的值即可判断
       ;这句进行相应修改就能判断其他条件。
            If (funcObj.Call(cellLoop.Value) = condition) 
                arr.Push(cellLoop)
        }
        xl.ScreenUpdating := True
        Return arr
    }

  

以上是关于AutoHotkey的函数对象的Bind方法绑定参数的应用的主要内容,如果未能解决你的问题,请参考以下文章

call/apply/bind

call/apply/bind

函数方法:call() apply() bind() 自定义绑定对象

关于bind()方法

JavaScript中的apply()call()bind()

JS事件之自建函数bind()与兼容性问题解决