Lisp thống kê text là công cụ đếm xem mỗi dòng chữ trong bản vẽ lặp lại bao nhiêu lần, rồi vẽ luôn kết quả thành bảng ngay cạnh chỗ bạn bấm chuột. Bài này in mật khẩu giải nén, nói rõ gói tải chứa gì, cách nạp cho AutoCAD 2026 và bốn thứ mà lệnh không đếm.
Tóm tắt. Gói tải đúng chủ đề bài, bên trong có đúng một tệp B13_Thong ke text_tkt.lsp, 1.107 byte, ngày 3 tháng 4 năm 2020. Mật khẩu giải nén là autocad123. Lệnh gọi là TKT. Nó chỉ đếm đối tượng TEXT một dòng nên bỏ qua MTEXT, thuộc tính khối và chữ của kích thước. Bảng kết quả xếp theo số đếm tăng dần, và rất hay vỡ phông chữ Việt vì lệnh lấy kiểu chữ hiện hành chứ không lấy kiểu chữ của text nguồn.
Gói tải ở bài lisp thống kê text này chứa gì
Gói tải gồm đúng những thứ sau. Dung lượng ghi đúng theo số byte của tệp.
| Hạng mục | Giá trị |
|---|---|
| Tệp trên Google Drive | 73.715 byte, khoảng 72 KB, định dạng RAR 5 |
| Kho nén tải về | RAR 5, kèm một ảnh JPG 88.958 byte không cần dùng tới |
| Mật khẩu giải nén | autocad123 |
| Sau khi giải nén | Đúng 1 tệp, B13_Thong ke text_tkt.lsp, 1.107 byte |
| Ngày tệp lisp | 3 tháng 4 năm 2020, lúc 11 giờ 37 |
| Số dòng mã | 26 dòng, thuần ký tự ASCII |
| Tên lệnh khai báo | (defun c:tkt …), tức gõ TKT |
Ảnh JPG kèm trong gói là tờ hướng dẫn bảo bạn mở trình duyệt điện thoại, tra một từ khoá bán hàng trên Google, vào một trang thương mại rồi kéo xuống chân trang lấy mật khẩu. Bỏ qua tờ đó. Đường đi ấy đã hỏng từ lâu, và mật khẩu đã in ngay dưới đây.
Lisp đếm dòng text trùng nhau, lệnh TKT
Một tệp .lsp duy nhất, 26 dòng mã, chạy bằng ActiveX. Đếm số lần lặp của từng dòng TEXT rồi vẽ bảng kết quả tại điểm bạn chỉ.
- Định dạng LSP, đóng trong RAR
- Dung lượng tải 73.715 byte
- Số tệp sau giải nén 1
- Lệnh TKT
Mật khẩu giải nén: autocad123
Nạp tệp lisp vào AutoCAD 2026
Giải nén hết ba lớp, bạn được một tệp .lsp. Chép nó vào một thư mục cố định, ví dụ D:\CAD\lisp. Đừng để trong thư mục Downloads, vì mỗi lần dọn máy là mất. Thư mục này dùng chung cho các lisp khác trong bài tổng hợp lisp cad.
Sau đó làm ba việc trong AutoCAD 2026. Gõ OPTIONS, sang thẻ Files, thêm thư mục vừa tạo vào cả Support File Search Path lẫn Trusted Locations. Gõ APPLOAD, trỏ tới tệp và bấm Load, các bước kể kỹ ở bài cách load lisp trong cad. Cuối cùng mở Startup Suite trong chính hộp thoại đó rồi thêm tệp vào, để bản vẽ nào mở lên cũng có sẵn lệnh.
Nếu bỏ qua bước Trusted Locations, AutoCAD sẽ chặn lại bằng hộp thoại cảnh báo dưới đây. Bấm Load Once là chạy được ngay lần này, nhưng lần sau nó lại hỏi.

Hình 1. Hộp thoại Security - Unsigned Executable File trên AutoCAD 2026. Ảnh chụp khi nạp một tệp lisp khác, nhưng hộp thoại hiện y hệt với mọi tệp .lsp chưa ký số và nằm ngoài thư mục tin cậy. Ba nút lần lượt là nạp luôn từ nay, nạp một lần, và không nạp.
Ba bước dùng lệnh TKT
Ví dụ dưới đây lấy lại đúng bản vẽ trong bài gốc năm 2020: một khối ghi chú vật liệu gồm 11 dòng chữ, trong đó nhiều dòng lặp lại.

Hình 2. Khối ghi chú gốc, 11 dòng TEXT. Dòng "chiều dày lớp bảo vệ 15 đối với sàn" xuất hiện 4 lần, dòng "25 đối với dầm, cột" xuất hiện 3 lần, bốn dòng còn lại mỗi dòng một lần.
Bước 1. Gõ TKT rồi Enter. Dòng nhắc hiện ra là Chon Text de Liet ke hay ENTER de chon tat ca. Quét chọn phần chữ bạn muốn đếm, hoặc bấm Enter luôn để lấy toàn bộ text trên tab đang mở.

Hình 3. Con trỏ đổi thành ô vuông chọn đối tượng. Lệnh đã cài sẵn bộ lọc nên bạn quét trùm cả bản vẽ cũng chỉ dính chữ, không dính đường nét.
Bước 2. Chọn xong thì Enter. Dòng nhắc chuyển sang Diem dat Bang, chờ bạn chỉ một điểm.

Hình 4. Dòng nhắc chỗ đặt bảng. Bấm chuột vào chỗ trống, hoặc gõ thẳng cặp toạ độ.
Bước 3. Bấm điểm. Bảng hiện ra ngay, gồm hai cột chữ rời: cột trái là số lần lặp, cột phải là nội dung dòng.
Bảng kết quả được đặt theo công thức nào
Đây là chỗ hay gây bực nhất, vì nhiều người bấm điểm xong không thấy bảng đâu, hoặc thấy một bảng bé như hạt gạo. Toàn bộ kích thước bảng do hai biến hệ thống quyết định, không có hộp thoại nào để chỉnh.
Hình 5. Chiều cao chữ của bảng bằng DIMTXT nhân DIMSCALE. Cột nội dung nằm cách cột số đếm đúng 5 lần chiều cao đó, mỗi dòng cách nhau 1,5 lần. Điểm bạn bấm chính là gốc của chữ đầu tiên ở cột số đếm.
Ba hệ quả rút ra từ công thức này. Bản vẽ đang để DIMSCALE bằng 100 và DIMTXT bằng 2,5 thì chữ trong bảng cao 250 đơn vị, tức là rất to, phải thu nhỏ màn hình mới thấy. Bản vẽ để DIMSCALE bằng 1 thì bảng bé xíu lẫn vào nét vẽ. Còn bản vẽ đặt DIMSCALE bằng 0, kiểu ghi kích thước theo tỷ lệ khung nhìn, thì chiều cao tính ra bằng 0 và lệnh không tạo được chữ. Gõ DIMSCALE kiểm trước khi chạy là xong.
Thứ tự dòng cũng cố định. Mã sắp xếp bằng phép so sánh (< (cdr x) (cdr y)), tức tăng dần theo số đếm, nên dòng lặp nhiều nhất nằm dưới cùng chứ không phải trên cùng. Muốn ngược lại thì đổi dấu < thành > trong dòng vl-sort.
Vì sao bảng kết quả hay vỡ chữ tiếng Việt
Bài gốc chụp cả kết quả nhưng không nói gì về chuyện này, còn người dùng thì gặp suốt. Đây là ảnh kết quả thật của chính bản vẽ ví dụ.

Hình 6. Bảng kết quả. Số đếm đúng tuyệt đối, tổng 6 dòng cộng lại vừa đủ 11. Nhưng chữ Việt vỡ hết: "chiều dày lớp bảo vệ" hiện thành "chÒu dÇy líp b?o vÖ".
Nguyên nhân nằm ở chỗ mã gọi hàm vla-addtext mà không chỉ định kiểu chữ. Đối tượng mới sinh ra vì thế mang kiểu chữ hiện hành của bản vẽ, thường là Standard với phông txt.shx. Trong khi đó text nguồn dùng một phông Việt hoá kiểu VNI hoặc TCVN3, nơi các ký tự có dấu được cất ở vùng mã cao. Chuỗi ký tự chép sang nguyên vẹn, chỉ có bảng chữ để vẽ ra là khác, nên hiện thành ký tự lạ.
Cách chữa mất mười giây. Trước khi gõ TKT, bấm vào một dòng text nguồn, xem ô Style trong bảng Properties để biết tên kiểu chữ của nó. Đặt kiểu đó thành kiểu hiện hành bằng ô Text Style trên ribbon Annotate. Rồi mới chạy lệnh. Bảng sẽ ra đúng chữ. Bảng đã lỡ vẽ sai thì chọn hết rồi đổi Style trong Properties, không cần chạy lại.
Bốn thứ lisp thống kê text không đếm
Đây là giới hạn quan trọng nhất và cũng dễ hiểu lầm nhất. Cả hai lệnh chọn trong mã đều mang bộ lọc (cons 0 "TEXT"). Mã 0 trong DXF là tên loại đối tượng, và chuỗi "TEXT" chỉ khớp đúng loại text một dòng.
Hình 7. Bên trái là thứ lệnh nhìn thấy, bên phải là thứ nó không nhìn thấy. Bốn nhóm bị bỏ qua đều là chữ, nhưng trong AutoCAD chúng thuộc loại đối tượng khác.
Nhóm thứ nhất là MTEXT, chữ nhiều dòng gõ bằng lệnh MTEXT. Nhóm thứ hai là thuộc tính khối, tức phần chữ điền vào khung tên hay ký hiệu cao độ. Nhóm thứ ba là mọi chữ nằm bên trong định nghĩa block. Nhóm thứ tư là chữ do lệnh ghi kích thước hoặc ghi chú dẫn sinh ra. Muốn sửa số của Dim thì dùng lisp làm tròn số của Dim. Bản vẽ hiện đại dùng MTEXT nhiều hơn TEXT, nên chạy lệnh mà bảng ra ngắn hơn dự đoán thì gần như chắc chắn vì lý do này.
Còn một chi tiết nhỏ nhưng hay làm sai kết quả. Mã dùng hàm assoc để gom các dòng giống nhau, mà phép so sánh chuỗi trong AutoLISP phân biệt chữ hoa chữ thường. Hai dòng "Thép D10" và "THÉP D10" bị tính là hai mục riêng. Một dấu cách thừa ở cuối dòng cũng vậy.
Sửa mã để đếm được cả MTEXT
Mở tệp bằng Notepad, tìm hai chỗ có chuỗi (cons 0 "TEXT"), đổi cả hai thành (cons 0 "TEXT,MTEXT"). Bộ lọc của ssget chấp nhận nhiều tên loại đối tượng ngăn nhau bằng dấu phẩy, nên chỉ cần sửa đúng chuỗi đó. Lưu lại và nạp lại bằng APPLOAD.
Sau khi sửa thì nhớ điều này. Nội dung MTEXT có thể chứa mã định dạng như \P xuống dòng hay {\fArial|b1;…} đổi phông. Hàm vla-get-TextString trả về cả phần mã đó, nên hai đoạn nhìn giống hệt nhau trên màn hình vẫn có thể bị đếm thành hai mục khác nhau. Muốn gom đúng thì phải lọc mã định dạng trước khi so sánh, và đó là việc lớn hơn nhiều so với sửa một chuỗi.
Một điểm nữa của mã đáng biết trước khi sửa. Bảng luôn được vẽ vào không gian mô hình, vì mã lấy sẵn vla-get-modelspace. Nhưng nhánh chọn tất cả lại lọc theo tab hiện hành qua biến CTAB. Nghĩa là đứng ở tab Layout gõ lệnh thì text được đếm là text của layout đó, còn bảng kết quả lại rơi vào tab Model. Bấm điểm xong không thấy gì thì sang tab Model tìm.
Không cài lisp thì đếm bằng gì
AutoCAD có sẵn hai đường, và chúng hữu ích khi bạn ngồi máy người khác hoặc khi không được phép nạp tệp ngoài.
Dùng QSELECT với bảng Properties
Gõ QSELECT, chọn Object type là Text, chọn Properties là Contents, đặt toán tử và gõ chuỗi cần tìm. Bấm OK, AutoCAD chọn hết các dòng khớp. Bảng Properties ở tiêu đề sẽ hiện tên loại đối tượng kèm số lượng đang chọn. Cách này đếm từng chuỗi một, hợp khi bạn chỉ cần kiểm một vài giá trị.
Dùng trình Data Extraction
Gõ DATAEXTRACTION trên AutoCAD bản đầy đủ. Trình hướng dẫn cho chọn loại đối tượng Text, chọn thuộc tính Contents, và có sẵn cột Count gộp các dòng trùng nhau. Kết quả xuất được ra bảng nhúng thẳng vào bản vẽ hoặc ra tệp bảng tính. Chậm hơn gõ ba chữ TKT, nhưng kết quả là bảng thật có khung, và cập nhật lại được.
Đừng nhầm với TCOUNT. Nhiều bài trên mạng liệt kê TCOUNT vào nhóm công cụ thống kê chữ. Không phải. TCOUNT là lệnh của Express Tools dùng để đánh số thứ tự tự động cho các dòng chữ đã chọn, nó ghi thêm số vào text chứ không đếm số lần lặp. Bài cũ ở địa chỉ này từng có một danh sách mười cái tên kiểu đó, phần lớn không tồn tại, nên đã bị gỡ bỏ.
Lỗi thường gặp
| Hiện tượng | Vì sao | Cách xử |
|---|---|---|
| Gõ TKT báo Unknown command | Tệp chưa nạp, hoặc đã nạp nhưng vừa mở sang bản vẽ khác | Nạp lại bằng APPLOAD rồi thêm vào Startup Suite |
| Bảng ra chữ vuông và dấu hỏi | Chữ mới lấy kiểu chữ hiện hành, không lấy kiểu của text nguồn | Đặt kiểu chữ hiện hành trùng với kiểu của text nguồn trước khi chạy |
| Bảng to khổng lồ hoặc bé li ti | Chiều cao chữ bằng DIMTXT nhân DIMSCALE | Sửa hai biến đó rồi chạy lại lệnh |
| Bấm điểm xong không thấy bảng | DIMSCALE đang bằng 0 nên chiều cao tính ra bằng 0 | Đặt DIMSCALE về một số dương đúng tỷ lệ bản vẽ |
| Chạy ở tab Layout mà bảng biến mất | Mã luôn ghi kết quả vào không gian mô hình | Sang tab Model tìm, hoặc chạy lệnh ngay trong Model |
| Bảng thiếu nhiều dòng so với bản vẽ | Những dòng đó là MTEXT hoặc thuộc tính khối | Đổi bộ lọc thành TEXT,MTEXT, hoặc dùng Data Extraction |
| Hai dòng nhìn giống nhau bị tách đôi | Khác nhau ở chữ hoa chữ thường hoặc dấu cách thừa | Dọn text nguồn cho thống nhất rồi đếm lại |
Câu hỏi thường gặp
Lisp thống kê text có chạy trên AutoCAD LT không?
Từ AutoCAD LT 2024 trở đi thì có, với điều kiện dùng bản Windows. LT 2024 đã có AutoLISP, và các hàm ActiveX nội bộ mà tệp này gọi đều nằm trong nhóm được hỗ trợ. Thứ LT không cho phép là mở thư viện ActiveX của phần mềm khác, ví dụ Excel, mà tệp này thì không cần. LT các bản trước 2024 và bản chạy trên máy Mac thì không dùng được.
Bảng kết quả có tự cập nhật khi sửa text nguồn không?
Không. Kết quả là các dòng chữ rời và tĩnh, không có liên kết nào với text nguồn. Sửa bản vẽ xong thì xoá bảng cũ và chạy lại lệnh. Cần một bảng biết tự cập nhật thì phải dùng đối tượng Table kèm trường dữ liệu, hoặc dùng Data Extraction có bật liên kết.
Lệnh có đếm được số lượng block hay đường nét không?
Không. Bộ lọc đóng cứng ở loại TEXT nên block, polyline hay hatch đều nằm ngoài tầm. Muốn đếm block thì dùng lệnh BCOUNT của Express Tools, Data Extraction, hoặc lisp thống kê nhiều loại block.
Muốn bỏ bảng vừa tạo thì làm sao cho nhanh?
Mã không mở nhóm hoàn tác riêng, nên cách chắc ăn là quét chọn đúng vùng bảng vừa sinh rồi xoá. Bảng nằm tách khỏi hình vẽ nên quét rất nhanh. Nếu lỡ đặt chồng lên bản vẽ thì dùng QSELECT lọc theo kiểu chữ hiện hành để chọn cho gọn.









