Skip to content

Instantly share code, notes, and snippets.

@JoeGlines
Last active April 26, 2021 15:43
Show Gist options
  • Save JoeGlines/8d3e64b98b4b75fed26e637364baf1b5 to your computer and use it in GitHub Desktop.
Save JoeGlines/8d3e64b98b4b75fed26e637364baf1b5 to your computer and use it in GitHub Desktop.
how to use AutoHotkey to get Excel column information
;*******************************************************
; Want a clear path for learning AutoHotkey; Take a look at our AutoHotkey Udemy courses. They're structured in a way to make learning AHK EASY
; Right now you can get a coupon code here: https://the-Automator.com/Learn
;*******************************************************
XL:=XL_Handle(1)
MsgBox % "First Col number: " XL_First_Col_Nmb(XL)
MsgBox % "First Col Alpha: " XL_First_Col_Alpha(XL)
MsgBox % "Last Col number: " XL_Last_Col_Nmb(XL)
MsgBox % "Last Col Alpha: " XL_Last_Col_Alpha(XL)
MsgBox % "Used Col Number: " XL_Used_Cols_Nmb(XL)
MsgBox % XL_Col_To_Char(13)
MsgBox % XL_String_To_Number("aa")
;Columns from Excel via AutoHotkey
;***********************First Column********************************.
XL_First_Col_Nmb(PXL){
Return, PXL.Application.ActiveSheet.UsedRange.Columns(1).Column
}
;***********************First Column Alpha**********************************.
XL_First_Col_Alpha(PXL){
FirstCol:=PXL.Application.ActiveSheet.UsedRange.Columns(1).Column
IfLessOrEqual,LastCol,26, Return, (Chr(64+FirstCol))
Else IfGreater,LastCol,26, return, Chr((FirstCol-1)/26+64) . Chr(mod((FirstCol- 1),26)+65)
}
;***********************Used Columns********************************.
XL_Used_Cols_Nmb(PXL){
Return, PXL.Application.ActiveSheet.UsedRange.Columns.Count
}
;***********************Last Column********************************.
XL_Last_Col_Nmb(PXL){
Return, PXL.Application.ActiveSheet.UsedRange.Columns(PXL.Application.ActiveSheet.UsedRange.Columns.Count).Column
}
;***********************Last Column Alpha** Needs Workbook********************************.
XL_Last_Col_Alpha(PXL){
LastCol:=XL_Last_Col_Nmb(PXL)
IfLessOrEqual,LastCol,26, Return, (Chr(64+LastCol))
Else IfGreater,LastCol,26, return, Chr((LastCol-1)/26+64) . Chr(mod((LastCol- 1),26)+65)
}
;***********************Numeric Column to string********************************.
XL_Col_To_Char(index){ ;Converting Columns to Numeric for Excel
IfLessOrEqual,index,26, Return, (Chr(64+index))
Else IfGreater,index,26, return, Chr((index-1)/26+64) . Chr(mod((index - 1),26)+65)
}
;***********************alpha to Number********************************.
XL_String_To_Number(Column){
StringUpper, Column, Column
Index := 0
Loop, Parse, Column ;loop for each character
{ascii := asc(A_LoopField)
if (ascii >= 65 && ascii <= 90)
index := index * 26 + ascii - 65 + 1 ;Base = 26 (26 letters)
else { return
} }
return, index
}
;********************get handle to Excel***********************************
XL_Handle(Sel){
ControlGet, hwnd, hwnd, , Excel71, ahk_class XLMAIN ;identify the hwnd for Excel
Obj:=ObjectFromWindow(hwnd,-16)
return (Sel=1?Obj.Application:Sel=2?Obj.Parent:Sel=3?Obj.ActiveSheet:"")
}
;***borrowd & tweaked from Acc.ahk Standard Library*** by Sean Updated by jethrow*****************
ObjectFromWindow(hWnd, idObject = -4){
if(h:=DllCall("LoadLibrary","Str","oleacc","Ptr"))
If DllCall("oleacc\AccessibleObjectFromWindow","Ptr",hWnd,"UInt",idObject&=0xFFFFFFFF,"Ptr",-VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0
Return ComObjEnwrap(9,pacc,1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment