Last active
April 26, 2021 15:43
-
-
Save JoeGlines/8d3e64b98b4b75fed26e637364baf1b5 to your computer and use it in GitHub Desktop.
how to use AutoHotkey to get Excel column information
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;******************************************************* | |
; 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