CXCSV2TXTExport und Import (CSV)Version 1.0.0In AutoCAD getestet
Text aus einer CSV-Datei platzieren
Liest x, y und Text aus einer Tabellendatei und setzt an jede Position einen Text, auf Wunsch mit Höhe und Drehung je Zeile.
So verwenden Sie ihn
- Eine CSV mit den Spalten x, y, Text und optional Höhe und Drehwinkel in Grad vorbereiten.
- CXCSV2TXT eingeben und die Datei wählen.
- Die Texte werden auf dem aktuellen Layer mit dem aktuellen Stil platziert.
Gut zu wissen
- Eine Kopfzeile wird automatisch übersprungen.
In AutoCAD laden
- Speichern Sie die Datei an einem beliebigen Ort.
- Geben Sie APPLOAD ein, wählen Sie die Datei und klicken Sie auf Laden.
- Geben Sie den Befehl ein: CXCSV2TXT.
Damit er bei jedem Start bereitsteht, fügen Sie ihn im selben Dialog zum Startup-Set hinzu, oder laden Sie mit dem optionalen Loader einen ganzen Ordner auf einmal. Der optionale Loader
In AutoCAD (Vollversion) getestet. Andere Programme, die AutoLISP ausführen, funktionieren vielleicht, wurden aber nicht getestet.
Der Code
Reiner Text, nichts ist versteckt. Kopieren Sie ihn in eine Datei namens cxcsv2txt.lsp oder laden Sie ihn herunter.
;;; ============================================================================
;;; CXCSV2TXT - Place text from a CSV file
;;; Version 1.0.0
;;; CADXChange LISP tools - https://cadxchange.net/resources/lisp/cxcsv2txt
;;; Tested in: AutoCAD (full version). Other programs that run AutoLISP may work but are not tested.
;;; Copyright (c) CADXChange. Free for personal and commercial use; do not resell or
;;; republish it as a collection. Terms: https://cadxchange.net/legal/lisp-terms
;;; ============================================================================
;; Place text from CSV ROWS: x, y, text, and optionally height (default HEIGHT) and rotation in degrees.
;; A row whose coordinates are not numbers (a header, for instance) is skipped. Returns how many texts were made.
(defun cx:csv2txt-run (rows height layer / n)
(setq n 0)
(foreach r rows
(if (and (cdr r) (cddr r) (numberp (read (car r))) (numberp (read (cadr r))))
(progn
(entmakex (list '(0 . "TEXT") (cons 8 layer) (list 10 (atof (car r)) (atof (cadr r)) 0.0)
(cons 40 (if (and (> (length r) 3) (> (atof (nth 3 r)) 0.0)) (atof (nth 3 r)) height))
(cons 1 (caddr r))
(cons 50 (if (> (length r) 4) (* pi (/ (atof (nth 4 r)) 180.0)) 0.0))
(cons 7 (getvar "TEXTSTYLE")) '(100 . "AcDbText")))
(setq n (1+ n)))))
n)
(defun c:CXCSV2TXT ( / *error* cx:sv file rows)
(setq *error* cx:err)
(if (setq file (cx:file-open "CSV file with x, y, text"))
(if (setq rows (cx:csv-rows file))
(progn
(cx:start '(("CMDECHO" . 0)))
(princ (strcat "\n" (itoa (cx:csv2txt-run rows (getvar "TEXTSIZE") (getvar "CLAYER"))) " text(s) placed."))
(cx:end))
(princ "\nThe file could not be read.")))
(princ))
;;; ---- Shared helpers (used by the command above; identical in every CADXChange tool) ----
;; Close the undo step and put the system variables back.
(defun cx:end ()
(foreach v cx:sv (setvar (car v) (cdr v)))
(command "_.UNDO" "_End")
(setq cx:sv nil)
(princ))
;; Error handler: restores everything, stays quiet on Esc.
(defun cx:err (msg)
(if (> (getvar "CMDACTIVE") 0) (command))
(cx:end)
(if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
(princ (strcat "\nError: " msg)))
(princ))
;; Ask which CSV file to read. Returns a path or nil. With FILEDIA 0 the name is typed at the command line.
(defun cx:file-open (title / f)
(if (= (getvar "FILEDIA") 0)
(progn
(setq f (getstring T (strcat "\n" title ": ")))
(if (= f "") nil f))
(getfiled title (getvar "DWGPREFIX") "csv" 4)))
;; All lines of a text file, or nil when it cannot be opened.
(defun cx:read-lines (file / f l out)
(if (setq f (open file "r"))
(progn
(while (setq l (read-line f)) (setq out (cons l out)))
(close f)
(reverse out))))
;; One CSV line to a list of strings (handles quotes and doubled quotes).
(defun cx:csv-parse (line / out cur q i c)
(setq out nil cur "" q nil i 1)
(while (<= i (strlen line))
(setq c (substr line i 1))
(cond
((and q (= c "\"") (= (substr line (1+ i) 1) "\""))
(setq cur (strcat cur "\"") i (1+ i)))
((= c "\"") (setq q (not q)))
((and (= c ",") (not q)) (setq out (cons cur out) cur ""))
(T (setq cur (strcat cur c))))
(setq i (1+ i)))
(reverse (cons cur out)))
;; Remove spaces and tabs at both ends.
(defun cx:trim (s / a b)
(setq a 1 b (strlen s))
(while (and (<= a b) (member (substr s a 1) '(" " "\t"))) (setq a (1+ a)))
(while (and (>= b a) (member (substr s b 1) '(" " "\t"))) (setq b (1- b)))
(substr s a (max 0 (1+ (- b a)))))
;; The rows of a CSV file as lists of strings, empty lines skipped; nil when the file cannot be read.
(defun cx:csv-rows (file / out)
(foreach l (cx:read-lines file)
(if (/= (cx:trim l) "") (setq out (cons (cx:csv-parse l) out))))
(reverse out))
;; Save the system variables in VARS ((name . value) ...), set them, and open one undo step.
;; The caller declares cx:sv as a local so the saved values live exactly as long as the command.
(defun cx:start (vars)
(setq cx:sv (mapcar (function (lambda (v) (cons (car v) (getvar (car v))))) vars))
(command "_.UNDO" "_Begin")
(foreach v vars (setvar (car v) (cdr v)))
(princ))
(princ "\nCXCSV2TXT loaded. Type CXCSV2TXT to start.")
(princ)
Versionsverlauf
Version 1.0.0 · 27. Oktober 2026
Erste Veröffentlichung.
Weitere Befehle: Export und Import (CSV)
CXTXT2CSVText in eine CSV-Datei exportierenCXBLK2CSVBlöcke und ihre Attribute in eine CSV-Datei exportierenCXCOORD2CSVKoordinaten in eine CSV-Datei exportierenCXLAYER2CSVDie Layerliste in eine CSV-Datei exportierenCXAREA2CSVFlächen und Umfänge in eine CSV-Datei exportierenCXOBJ2CSVEine Objektliste in eine CSV-Datei exportierenCXDIM2CSVBemaßungswerte in eine CSV-Datei exportierenCXPTSBenannte Punkte aus einer CSV-Datei zeichnenCXCSV2ATTBlockattribute aus einer CSV-Datei füllen