用AHK读写Excel表格数据

该示例展示了如何使用AutoHotkey (AHK) 通过COM接口读取和写入Excel表格数据,实现自动化操作。代码中包含了获取Excel对象、读取当前行数据、写入标记以及保存文件等功能,提高了数据处理效率,避免了手动操作的繁琐和错误。
摘要由CSDN通过智能技术生成

这是用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
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值