Lisp Xuất Cao Độ Trắc Ngang Sang Excel: Hướng Dẫn Chi Tiết Và Thực Tiễn

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 Files hoặc sử dụng lệnh APPLOAD để 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ính Elevation hoặc Z.

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.

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ện Excel.Application trong 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 ExportHeightToCSV sẽ đượ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ính Elevation (Z) khi làm việc với POINT hoặc LINE trong 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)

Lisp Xuất Cao Độ Trắc Ngang Sang Excel
Lisp Xuất Cao Độ Trắc Ngang Sang Excel

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ố SaveAs cầ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ấy Elevation từ thuộc tính 30.
  • Đố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 Suite củ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!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận