Was able to work it out,
Leaving this here for the future if anyone tries the same thing. This version uses letters for the area markers and just inserts the area data as text and not use the ugly Autocad table
(defun c:AT ( / *error* _startundo _endundo _centroid _text acdoc acspc cm el p1 ts ucsxang ucszdir label areas pt ent inspt cf alstart)
(setq cf 0.00694444) ; square inches to square feet
(defun *error* ( msg )
(if cm (setvar 'CMDECHO cm))
(_EndUndo acdoc)
(if (and el (entget el)) (entdel el))
(princ (strcat "\nError: " msg))
(princ))
(defun _StartUndo ( doc ) (_EndUndo doc) (vla-StartUndoMark doc))
(defun _EndUndo ( doc ) (if (= 8 (logand 8 (getvar 'UNDOCTL))) (vla-EndUndoMark doc)))
(defun _centroid ( space objs / reg cen )
(setq reg (car (vlax-invoke space 'addregion objs))
cen (vlax-get reg 'centroid))
(vla-delete reg)
(trans cen 1 0))
(defun _text ( space point string height rotation / text )
(setq text (vla-addtext space string (vlax-3D-point point) height))
(vla-put-alignment text acalignmentmiddlecenter)
(vla-put-textalignmentpoint text (vlax-3D-point point))
(vla-put-rotation text rotation)
text)
;; Initialize
(setq acdoc (vla-get-activedocument (vlax-get-acad-object))
acspc (if (= 1 (getvar 'CVPORT))
(vla-get-paperspace acdoc)
(vla-get-modelspace acdoc))
ucszdir (trans '(0 0 1) 1 0 t)
ucsxang (angle '(0 0 0) (trans (getvar 'UCSXDIR) 0 ucszdir))
ts 48.0 ; label text height
cm (getvar 'CMDECHO))
(setvar 'CMDECHO 0)
(_StartUndo acdoc)
;; Prompt for starting letter index (A=0, B=1, ..., Z=25)
(prompt "\nSpecify Starting Letter [A=0, B=1, ..., Z=25] <0>: ")
(setq alstart (getint))
(if (not alstart) (setq alstart 0))
(setq *al:num* alstart)
(setq areas '())
;; Area selection loop
(while (setq p1 (getpoint "\nPick Area [click inside or select closed object] <Enter to finish>: "))
(cond
;; Click in space: create boundary
((vl-consp p1)
(setq el (entlast))
(vl-cmdf "_.-boundary" "_A" "_I" "_N" "" "_O" "_P" "" "_non" p1 "")
(if (not (equal el (setq el (entlast))))
(progn
(setq ent (vlax-ename->vla-object el))
(setq label (chr (+ 65 *al:num*)))
(setq *al:num* (1+ *al:num*))
(setq inspt (_centroid acspc (list ent)))
(_text acspc inspt label ts ucsxang)
(setq areas (append areas (list (list label (* cf (vla-get-area ent))))))
(redraw el 3))
(prompt "\nCould not create boundary.")))
;; Select existing object
((and (listp p1) (eq (type (car p1)) 'ENAME))
(setq ent (vlax-ename->vla-object (car p1)))
(if (and (vlax-property-available-p ent 'area)
(or (eq "AcDbRegion" (vla-get-objectname ent))
(vlax-curve-isclosed (car p1))))
(progn
(setq label (chr (+ 65 *al:num*)))
(setq *al:num* (1+ *al:num*))
(setq inspt (_centroid acspc (list ent)))
(_text acspc inspt label ts ucsxang)
(setq areas (append areas (list (list label (* cf (vla-get-area ent))))))
)
(prompt "\nInvalid selection.")))))
;; Insert area data as plain text
(if areas
(progn
(setq pt (getpoint "\nPick point to place area data: "))
(foreach row areas
(_text acspc pt (strcat (car row) ": " (rtos (cadr row) 2 2) " sqft") 24.0 0.0)
(setq pt (polar pt (/ pi 2) -30.0)))))
(_EndUndo acdoc)
(setvar 'CMDECHO cm)
(princ))
(vl-load-com)
(princ "\n:: AreaLabelAtoZ.lsp | A-Z Labeling with Text Output ::")
(princ "\n:: Command: AT ::")
(princ)