Hallo,
ich habe mich bis jetzt mit AutoCAD-Tabellen noch nicht beschäftigt, daher habe ich vielleicht noch was falsch gemacht.
Ich habe ein statische Tabelle mit 6 Spalten und 56 Zeilen. In diese Zellen sollen Werte eingefügt werden und tlw. die Hintergrundfarbe der Zelle geändert werden.
Ich habe einen Beispielcode (die Werte sind hier nur zum testen), in dem ich eine Liste zusammen stelle und dann die Werte in die Tabelle fülle, einschließlich tlw. Hintergrundfarben für die Zellen.
Code:
(defun c:tblFill ( / AWS N NCOLUMN NROW TBLFILLLIST VLA-OBJ X) (vla-startundomark (vla-get-activedocument(vlax-get-acad-object)))
(if (and(setq aws
(ssget "_X"
(list
(cons 0 "ACAD_TABLE")
(cons 410 "Tabelle"))))
(=(sslength aws) 1)
(setq vla-obj
(vlax-ename->vla-object(ssname aws 0))))
(progn
(setq n 0)
(repeat 110
(setq n (+ n 1)
nRow (if (> n 55)(- n 55)n)
nColumn (if (> n 55)3 0))
(setq tblFillList
(cons (list nRow nColumn (itoa n) nil nil nil nil)
tblFillList)
tblFillList
(cons (list nRow (+ nColumn 1) "0.123" 1 nil nil '(232 193 192))
tblFillList)))
(mapcar '(lambda(X)
(JBf_AcadTable:SetCellProps vla-obj
(car X)(cadr X)(caddr X)(cadddr X)(nth 4 X)(nth 5 X)(nth 6 X)))
(reverse tblFillList)))
)
(vla-endundomark (vla-get-activedocument(vlax-get-acad-object)))
)
;;;Wert und Hintergrundfarbe einer Zelle eines ACAD_TABLE-OBjekte ändern
;;;Angabe der Zelle 1. Rows (Zeilen), 2. Columns (Spalten)jeweils beginnend bei 0
(defun JBf_AcadTable:SetCellProps (vla-obj nRow nColumn Text aciText rgbText aci rgb / VLA-COLOR)
(if (and (< nColumn (vlax-get vla-obj 'Columns))
(< nRow (vlax-get vla-obj 'Rows)))
(progn
(if Text
(vla-SetText vla-obj nRow nColumn Text))
(if (or aciText rgbText)
(progn
(setq vla-color (vla-getCellContentColor vla-obj nRow nColumn))
(if aciText
(vla-put-colorIndex vla-color aciText)
(vla-setRGB vla-color (car rgbText)(cadr rgbText)(caddr rgbText)))
(vla-setCellContentColor vla-obj nRow nColumn vla-color)))
(if (or aci rgb)
(progn
(setq vla-color (vla-getCellBackgroundColor vla-obj nRow nColumn))
(if aci
(vla-put-colorIndex vla-color aci)
(vla-setRGB vla-color (car rgb)(cadr rgb)(caddr rgb)))
(vla-setCellBackgroundColor vla-obj nRow nColumn vla-color))))
)
)
In Anhang habe ich die DWG-Datei mit der Tabelle angehängt. Die Lisp-Funktion (
c:tblFill) muss im Layout "
Tabelle" ausgeführt werden, dann wird die Tabelle auch gefüllt.
Ich habe jetzt keine Fortschrittsanzeige eingebaut, aber auch so merke ich, daß ich ca. 10 Sekunden brauche, dann ist die Tabelle gefüllt, in AutoCAD 2012, 2015, BricsCAD V15 und V16.
Problem: wenn ich danach den Zurück-Befehl aufrufe, dann wird zwar alles in der Zurück-Gruppe wieder rückgängig gemacht, dann kann ich in AutoCAD die Funktion aber kein zweites Mal mehr starten (egal ob 2012 oder 2015, sogar in 2016, er schmiert ab, nix geht mehr). Wenn ich die Dwg-Datei neu öffne und die Funktion wieder starte, dann funktioniert es wieder.
Anmerkung: in BricsCAD V15 oder V16 tritt das Problem nicht auf, da kann ich ZURÜCK machen und die Funktion gleich wieder starten.
Jetzt zwei Fragen:
Könnt Ihr das nachvollziehen?
Habe ich im Code etwas komplett unsinniges gemacht (wie gesagt, mit Tabellen hatte ich bisher nichts am Hut)
vielen Dank schon mal für hoffentlich aufschlußreiche Rückmeldungen.
------------------
viele Grüße
Jörn
http://www.bosse-engineering.com
Liniensignaturen Youtube
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP