码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-04-10 09:16:50      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:parse   color   函数对象   val   处理   range   for   数据   field   

近期在写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方法绑定参数的应用

标签:parse   color   函数对象   val   处理   range   for   数据   field   

原文地址:https://www.cnblogs.com/hyaray/p/10681205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!