这是用AHK读写Excel表格数据的例子,可以用于自动化编程中。
优点是:利用COM读取Excel表格数据,不用来回切换,且比复制可靠。

;-------------------------------------
;  用AHK读写Excel表格数据  By FeiYue
;
;  优点:利用COM读取Excel表格数据,不用来回切换,且比复制可靠
;-------------------------------------


F1::

;-- 获取COM对象
objExcel:=Excel_Get()

;-- 用鼠标先点击要操作的目标行的最右边的空白单元格

;-- 获取当前激活的单元格的行号(y)、列号(x)
y:=objExcel.ActiveCell.Row
x:=objExcel.ActiveCell.Column

;-- 读取当前行的所有文本数据到一个数组中(取文本值用“.Text”)
arr:=[]
Loop, % x-1
  arr.Push( objExcel.Cells(y,A_Index).Text )

;-- 在当前激活的单元格写入ok表示本行已经操作过,并激活下方的单元格
objExcel.Cells(y,x).Value:="ok"
objExcel.Cells(y+1,x).Activate

;-- 虽然可以每次操作都保存Excel文件,但是Excel文件很大时每次保存很卡
objExcel.ActiveWorkBook.Save

;-- 不想每次操作都保存Excel文件,可以将操作数据写入记录文件,防止突然断电
WriteLog(arr)

;-- 将获取的数据利用起来,比如:Clipboard:=姓名,Send ^v,粘贴到网页中

序号:=arr[1], 姓名:=arr[2], 身份证:=arr[3]

MsgBox, 4096,, % 序号 A_Tab 姓名 A_Tab 身份证

return


;======== 下面是函数 ========


;-- 将对象数据写入记录文件,记录文件在AHK主程序目录中
WriteLog(arr)
{
  static f:=A_AhkPath . "\..\操作记录.txt"
  s:=""
  For k,v in arr
    s.=A_Index=1 ? v : A_Tab . v
  s:=A_Now . A_Tab . StrReplace(s,"`r") . "`n"
  FileAppend, %s%, %f%
}

;-- 获取Excel窗口的COM对象  By FeiYue
Excel_Get(WinTitle="ahk_class XLMAIN")
{
  static obj
  Try
    if (obj.Version)
      return obj
  return obj:=Office_Get(WinTitle)
}

;-- 获取所有Office窗口的COM对象  By FeiYue
Office_Get(WinTitle="")
{
  static h:=DllCall("LoadLibrary", "Str","oleacc", "Ptr")
  WinGet, list, ControlListHwnd, % WinTitle ? WinTitle : "A"
  For i,hWnd in StrSplit(list, "`n")
  {
    ControlGetPos, x, y, w, h,, ahk_id %hWnd%
    if (y<10 or w<100 or h<100)
      Continue
    if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd
    , "UInt", 0xFFFFFFF0, "Ptr", 0*(VarSetCapacity(IID,16)
    +NumPut(0x0000000000020400,IID,"Int64")
    +NumPut(0x46000000000000C0,IID,8,"Int64"))+&IID, "Ptr*", pacc)=0
    {
      Acc:=ComObject(9, pacc, 1)
      Try
        if (Acc.Application.Version)
          return Acc.Application
    }
  }
  MsgBox, 4096,, Error: Can't Get Object From ACC !
  Exit
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐