Có thể bạn quan tâm: Kết Hợp Hàm Left Và Right Trong Excel – Cách Sử Dụng Đơn Giản Và Tối Ưu
Giới thiệu
Trong lĩnh vực thiết kế kỹ thuật, đặc biệt là trong công nghiệp chế tạo và xây dựng, việc thu thập và xử lý dữ liệu đo lường là một công đoạn quan trọng. Một trong những công việc thường gặp là trích xuất dữ liệu cao độ trắc ngang từ các bản vẽ CAD (ví dụ: AutoCAD) và lưu vào bảng tính Excel để phân tích, báo cáo hoặc đưa vào hệ thống quản lý dữ liệu. Để tự động hoá quy trình này, chúng ta có thể dùng ngôn ngữ lập trình LISP (AutoLISP – một biến thể của Lisp dành cho AutoCAD) để đọc dữ liệu từ bản vẽ và ghi ra file Excel.
Bài viết này sẽ trình bày một cách chi tiết, từng bước, cách viết một script AutoLISP đơn giản để:
1. Chọn các đối tượng (điểm, đường, polygon…) trong bản vẽ mà chứa thông tin cao độ trắc ngang.
2. Lấy thông tin cao độ từ các đối tượng này.
3. Ghi dữ liệu vào file Excel (định dạng CSV hoặc sử dụng API OLE Automation để tạo file .xlsx).
Ngoài ra, chúng ta sẽ thảo luận về cách tối ưu script, xử lý lỗi, và mở rộng tính năng cho các trường hợp phức tạp hơn như xuất nhiều bảng, định dạng dữ liệu, hoặc tích hợp với các công cụ BI.
Thủ thuật: Để tránh lỗi khi chạy script trong AutoCAD, hãy lưu file .lsp vào thư mục
C:\Users\<UserName>\AppData\Roaming\Autodesk\AutoCAD\<Version>\R<Build>\Support Fileshoặc sử dụng lệnhAPPLOADđể tải. Khi script chạy, hãy chắc chắn rằng các đối tượng đã được chọn đúng và dữ liệu cao độ có thể truy cập qua thuộc tínhElevationhoặcZ.
Có thể bạn quan tâm: Kế Hoạch Tổ Chức Đám Cưới File Excel: Hướng Dẫn Chi Tiết Để Tổ Chức Hoàn Hảo
1. Tổng quan về LISP trong AutoCAD
1.1 AutoLISP là gì?
AutoLISP là một biến thể của ngôn ngữ lập trình Lisp được thiết kế đặc biệt cho việc mở rộng AutoCAD. Nó cho phép người dùng viết hàm, lệnh tùy chỉnh, tự động hoá tác vụ, và tương tác với các đối tượng trong bản vẽ.
1.2 Tại sao sử dụng LISP để xuất dữ liệu?
- Tự động hoá: Tránh thao tác thủ công, giảm sai sót.
- Tích hợp sâu: LISP có thể truy cập mọi thuộc tính của đối tượng trong AutoCAD.
- Tiện lợi: Được hỗ trợ trực tiếp trong môi trường AutoCAD, không cần cài đặt phần mềm bên ngoài.
Có thể bạn quan tâm: Cách Kéo Số Thứ Tự Tự Động Trong Excel – Hướng Dẫn Chi Tiết, Bước Bước, Thực Hành
2. Chuẩn bị môi trường làm việc
2.1 Kiểm tra phiên bản AutoCAD
- Lưu ý rằng các hàm AutoLISP có thể thay đổi giữa các phiên bản AutoCAD (2026, 2026, 2026,…). Đảm bảo script được viết cho phiên bản bạn đang sử dụng.
2.2 Cài đặt thư viện hỗ trợ Excel
- CSV: Dễ dàng và nhanh nhất. Tạo file .csv và mở bằng Excel.
- OLE Automation: Cho phép tạo file .xlsx với định dạng, màu sắc, định dạng ô. Trong ví dụ này, chúng ta sẽ dùng OLE vì nó cho phép tạo file Excel thực sự.
Lưu ý: Để sử dụng OLE, AutoCAD cần được cài đặt với thư viện
mscomctl.ocx. Nếu không, bạn có thể sử dụng thư việnExcel.Applicationtrong Windows.
3. Xây dựng script: Bước 1 – Chọn đối tượng
(defun c:ExportHeightCSV (/ selset) ;; Prompt user to select objects (setq selset (ssget '((0 . "POINT,CIRCLE,LINE,ARC") (10 . ))) ) (if selset (progn (princ "\nĐã chọn: ") (princ (sslength selset)) (princ "\nTiến hành xuất dữ liệu…") (ExportHeightToCSV selset) (princ "\nHoàn thành xuất dữ liệu.") ) (princ "\nKhông có đối tượng nào được chọn.") ) (princ)
)
ssget– Lệnh chọn đối tượng. Tham số((0 . "POINT,CIRCLE,LINE,ARC") (10 . ))chỉ chọn các đối tượng có lớp khác nhau, nhưng bạn có thể tùy chỉnh.- Hàm
ExportHeightToCSVsẽ được định nghĩa trong bước tiếp theo.
4. Xây dựng script: Bước 2 – Trích xuất thông tin cao độ
(defun ExportHeightToCSV (ss) (setq file-path "C:/Temp/ExportedHeights.csv") ;; Mở file để ghi (setq f (open file-path "w")) ;; Ghi header (write-line "ObjectType,EntityID,Elevation" f) (setq i 0) (while (< i (sslength ss)) (setq ent (ssname ss i)) (setq entData (entget ent)) (setq objType (cdr (assoc 0 entData))) (setq entId (cdr (assoc 5 entData))) ;; Lấy cao độ: thuộc tính 10 (điểm bắt đầu) và 30 (elevation) (setq e (cdr (assoc 10 entData))) ; tọa độ 3D (setq elev (if e (cdr (assoc 30 entData)) 0.0)) ; nếu không có elevation, mặc định 0 ;; Tạo dòng dữ liệu (setq line (strcat objType "," entId "," (rtos elev 2 4))) (write-line line f) (setq i (1+ i)) ) ;; Đóng file (close f) (princ (strcat "\nFile đã được ghi: " file-path))
)
Giải thích
entget: Trả về danh sách các attribute (cặp tag-value) của đối tượng.assoc 10: Thuộc tính tọa độ 3D (X,Y,Z). Nếu đối tượng không có, giá trịnil.assoc 30: Thuộc tínhElevation(Z) khi làm việc vớiPOINThoặcLINEtrong chế độ 3D.rtos: Chuyển đổi số thực sang chuỗi, định dạng 4 chữ số thập phân.
5. Xây dựng script: Bước 3 – Xuất sang Excel thực tế (OLE Automation)

Có thể bạn quan tâm: Kết Nối Máy Quét Mã Vạch Với Excel: Hướng Dẫn Chi Tiết Cho Doanh Nghiệp
Nếu bạn muốn tạo file .xlsx thực sự với định dạng, chúng ta có thể sử dụng OLE:
(defun ExportHeightExcel (ss) (setq file-path "C:/Temp/ExportedHeights.xlsx") (setq xlapp (vlax-get-or-create-object "Excel.Application")) (setq xlwb (vlax-invoke xlapp 'Workbooks 'Add)) (setq xlsheet (vlax-get-property xlwb 'Worksheets)) (setq xlws (vlax-get-property xlsheet 1)) ;; Ghi header (vlax-put-property xlws 'Cells 1 1 "ObjectType") (vlax-put-property xlws 'Cells 1 2 "EntityID") (vlax-put-property xlws 'Cells 1 3 "Elevation") (setq row 2) (while (< row (1+ (sslength ss))) (setq ent (ssname ss (1- row))) (setq entData (entget ent)) (setq objType (cdr (assoc 0 entData))) (setq entId (cdr (assoc 5 entData))) (setq elev (cdr (assoc 30 entData))) (if (not elev) (setq elev 0.0)) (vlax-put-property xlws 'Cells row 1 objType) (vlax-put-property xlws 'Cells row 2 entId) (vlax-put-property xlws 'Cells row 3 elev) (setq row (1+ row)) ) (vlax-invoke-method xlwb 'SaveAs file-path) (vlax-invoke xlapp 'Quit) (princ (strcat "\nFile Excel đã được lưu tại: " file-path))
)
Lưu ý
- Đảm bảo rằng
Excel.Applicationđã được cài đặt và đăng ký trong Windows. - Tham số
SaveAscần đường dẫn đầy đủ. Nếu không, file sẽ bị lưu trong thư mục mặc định của AutoCAD.
6. Tối ưu hóa và mở rộng
6.1 Xử lý lỗi
- Không có elevation: Đặt giá trị mặc định 0.
- Đối tượng không hợp lệ: Bỏ qua hoặc thông báo.
- File đã tồn tại: Thêm tùy chọn ghi đè hoặc lưu với tên mới.
6.2 Hỗ trợ nhiều loại đối tượng
- Thêm
TEXT,MTEXTđể lấyElevationtừ thuộc tính30. - Đối với
POLYLINE, lấy elevation từ mỗi vertex.
6.3 Tích hợp với dữ liệu GIS
- Khi dữ liệu cao độ được trích xuất, có thể nhúng vào bản đồ GIS (ArcGIS, QGIS) bằng cách tạo shapefile hoặc GeoJSON.
6.4 Thực thi tự động
- Đặt script vào
Startup Suitecủa AutoCAD để tự động chạy khi mở bản vẽ. - Sử dụng
timerđể thực thi định kỳ.
7. Ví dụ thực tế: Xuất dữ liệu cao độ trắc ngang từ bản vẽ 3D
Giả sử bạn có bản vẽ 3D với các đường LINE thể hiện trục trắc ngang. Bạn muốn xuất tọa độ Z của các điểm bắt đầu và kết thúc để phân tích độ dốc.
(defun c:ExportSlopeData (/ ss) (setq ss (ssget '((0 . "LINE") (70 . 0))) ) ; chỉ lấy đường thẳng 2D (if ss (progn (setq file-path "C:/Temp/SlopeData.csv") (setq f (open file-path "w")) (write-line "LineID,StartX,StartY,StartZ,EndX,EndY,EndZ" f) (setq i 0) (while (< i (sslength ss)) (setq ent (ssname ss i)) (setq data (entget ent)) (setq startPt (cdr (assoc 10 data))) (setq endPt (cdr (assoc 11 data))) (setq zStart (cdr (assoc 30 data))) ; nếu 3D (setq zEnd (cdr (assoc 31 data))) (if (not zStart) (setq zStart 0.0)) (if (not zEnd) (setq zEnd 0.0)) (setq line (strcat (itoa i) "," (rtos (car startPt) 2 4) "," (rtos (cadr startPt) 2 4) "," (rtos zStart 2 4) "," (rtos (car endPt) 2 4) "," (rtos (cadr endPt) 2 4) "," (rtos zEnd 2 4))) (write-line line f) (setq i (1+ i)) ) (close f) (princ (strcat "\nĐã lưu file: " file-path)) ) (princ "\nKhông tìm thấy đường thẳng.") ) (princ)
)
Bạn có thể chạy lệnh EXPORTSLOPEDATA để xuất dữ liệu trục trắc ngang.
8. Đánh giá và kết luận
8.1 Ưu điểm
- Tốc độ: Việc đọc và ghi dữ liệu thực hiện nhanh chóng, bất kể bản vẽ có hàng nghìn đối tượng.
- Tính linh hoạt: Bạn có thể tùy chỉnh script để lấy thêm thông tin (mã số, màu sắc, độ dốc).
- Tích hợp: Dữ liệu xuất ra Excel có thể được nhập vào các hệ thống ERP, BIM, hoặc công cụ BI như Power BI.
8.2 Nhược điểm
- Phụ thuộc vào môi trường: Đối với phần OLE, cần cài đặt Excel trên máy tính.
- Độ phức tạp: Khi dữ liệu phức tạp (đối tượng 3D, nhiều thuộc tính), script cần được viết cẩn thận để tránh lỗi.
8.3 Kết luận
Việc xuất dữ liệu cao độ trắc ngang từ AutoCAD sang Excel bằng AutoLISP là một công cụ mạnh mẽ và tiết kiệm thời gian. Với những ví dụ và hướng dẫn chi tiết trên, bạn có thể nhanh chóng triển khai quy trình tự động hoá trong công việc thiết kế, kiểm tra chất lượng, và báo cáo.
Hãy thử áp dụng script vào dự án của bạn, điều chỉnh cho phù hợp với các tiêu chuẩn và quy trình nội bộ. Khi đã thành thạo, bạn có thể mở rộng script để tự động xử lý dữ liệu, tích hợp với các công cụ phân tích nâng cao, hoặc thậm chí chuyển dữ liệu tới các nền tảng đám mây để chia sẻ kèm theo.
Với AutoLISP, bạn không chỉ rút ngắn thủ công mà còn tạo ra quy trình làm việc đồng nhất, chính xác và có thể tái sử dụng. Chúc bạn thành công trong việc triển khai và áp dụng công nghệ tự động hoá trong thiết kế kỹ thuật!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
