| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Block gemäß Excel-Tebelle einfügen (6979 mal gelesen)
|
Barbara33 Mitglied
Beiträge: 91 Registriert: 18.04.2007 Autocad 2013
|
erstellt am: 24. Jun. 2013 18:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich würde gerne einen existierenden Block mit 3 Attributen hundert Mal in eine bestehende dwg einfügen. Dazu habe ich eine Excel-Tabelle mit hundert Zeilen und fünf Spalten: X-Koordinate des Einfügepunktes Y-Koordinate des Einfügepunktes Inhalt des 1. Attributes Inhalt des 2. Attributes Inhalt des 3. Attributes Wie kann man nun einen bestehenden Block an den Koordinaten und mit den Attributen, für jede Zeile der Excel-Tabelle in die dwg einfügen? Es soll einfach sein. d.h. spätere Änderungen sollen sich nicht gegenseitig aktualisieren. LG, Barbara [Diese Nachricht wurde von Barbara33 am 24. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dig15 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. für Markscheidewesen und Geodäsie
Beiträge: 5833 Registriert: 27.02.2003 DWG TrueView 2014
|
erstellt am: 24. Jun. 2013 19:02 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Hallo Barbara33, um einen Block einzufügen gibt es viele Wege. Da ich mich selbst mit der Lispprogrammierung nicht so anfreunden kann, löse ich das immer per Script. ------------------ Viele Grüße Lutz Glück Auf! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbara33 Mitglied
Beiträge: 91 Registriert: 18.04.2007 Autocad 2013
|
erstellt am: 24. Jun. 2013 19:13 <-- editieren / zitieren --> Unities abgeben:
Gut, und wie geht das mit dem Skript? (Bzw. wie fange ich an?) Und noch was: Macht man das mit Attributen? Oder einfach mit drei Texten? Ich frage deshalb, weil die Textpositionen in den bestehenden Blöcken in der Zeichnung nicht geändert werden, nachdem ich sie im Blockeditor geändert habe. Vielleicht habe ich da Attribute missbraucht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 24. Jun. 2013 19:31 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Im VBA Editor (ALT F11) mit menueleise, Exras,Verweise,durchsuchen den Verweis auf excel.exe setzen Haken Bei Microsoft eccel xyz Type library nicht vergessen Links rechte Maustaste auf Modul - einfuegen Modul Falls erste Zeile option explizit - diese loeschen Code ins Fenster pasten Excel Tabelle gemaess code anpassen oder code modifizieren. (Tabellennamen, Worksheet, Spaltennummern,Blockname etc.) Die Bloecke muessen sich einmal bereits in der Zeichnung befinden. (Einmal reinladen und gleich wieder loeschen - die Daten sind dann noch da) Dann code per Makro ausfuehren oder im EDITOR EINMAL IN DEN CODE CLICKEN UND F5 DRUECKEN. (Ausfuehrlichere VBA Anleitungen gibts im Netz)
Sub DRAW_BALLS_from_excel() Dim blo As AcadBlockReference Dim NeuPunkt(0 To 2) As Double Dim wb As Excel.Workbook Dim WTAB As Excel.Worksheet Dim Sheet As String Set wb = Excel.Workbooks.Open("e:\canteen.xls") Sheet = "COORDS" Set WTAB = wb.Worksheets(Sheet) Dim att As Variant Dim attlist As Variant Dim layer As String nr = 2 '1 te zeile ueberschriften 'daten starten bei 2 Do While Sheets(Sheet).Cells(nr, 1) <> "" x = Sheets(Sheet).Cells(nr, 1) * 1 y = Sheets(Sheet).Cells(nr, 2) * 1 z = 0 id1 = Sheets(Sheet).Cells(nr, 3) id2 = Sheets(Sheet).Cells(nr, 4) id3 = Sheets(Sheet).Cells(nr, 5) typ = "3D-BALL" 'blockname
NeuPunkt(0) = x NeuPunkt(1) = y NeuPunkt(2) = z Set blo = ThisDrawing.modelspace.InsertBlock(NeuPunkt, typ, 1, 1, 1, 0) blo.layer="SPEZIALLAYER" If blo.HasAttributes Then attlist = blo.GetAttributes For i = LBound(attlist) To UBound(attlist) 'attnamen muessen angepasst werden If attlist(i).TagString = "attName1" Then attlist(i).textstring = id1 If attlist(i).TagString = "attName2" Then attlist(i).textstring = id2 If attlist(i).TagString = "attName3" Then attlist(i).textstring = id3 Next End If nr = nr + 1 Loop 'Set WB = Excel.Workbooks.Close End Sub Die Bloecke liegen alle auf dem gleichen layer SPEZIALLAYER (vor Aufruf anzulegen). Daraus folgt Layer loeschen - excel Tabelle pflegen und ggf alles neu einfuegen. Richtig einfach (AZUBI sicher) = paar tage Aufriss mit zentraler SQL Datenbank etc. evtl auch mit dynamischen Bloecken Zeichnungsverwaltung usw. Bitte beim Anwendungsentwickler des Vertrauens ordern. Ich hab an meinen Routinen auch'n paar Tage gestrickt... und man soll die User Eigeninitative ja auch nicht gleich am Anfang ausbremsen BTW Google hat da auch was dazu (tonnenweise) ------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! [Diese Nachricht wurde von rexxitall am 24. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadwomen Ehrenmitglied V.I.P. h.c. Mädchen für fast alles
Beiträge: 3067 Registriert: 26.08.2002 ACAD R11 - 2022 (Plant3D) AVIS ACAD LT 2013- 2021 ZWCAD 2015 Versuch "nun ja" [s]History P3D 2012/(13) SP und Hotfix([/s]<P> Windows 10 / 64 Bit Xeon CPU 3.5GHz 16GB Ram NVIDIA Quadro P2000 3x Dell TV100 88P Monitore
|
erstellt am: 24. Jun. 2013 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Zitat: Original erstellt von Barbara33:Ich frage deshalb, weil die Textpositionen in den bestehenden Blöcken in der Zeichnung nicht geändert werden, nachdem ich sie im Blockeditor geändert habe. Vielleicht habe ich da Attribute missbraucht. [/B]
attsync .... dann sollte es klappen .... Hartmut hatte recht , muss heut am Mond liegen
cu cw
------------------ Also ich finde Unities gut ... und andere sicher auch ------------------------------------------------ cadwomen™ Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 24. Jun. 2013 19:48 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
OK vergiss den Beitrag mit dem VBA Script - wir lernen heute erst einmal etwas ueber attribute. Blocke mit TEXTEN kannst du nicht aendern. Wenn du sie spiegelst spiegeln sich die texte mit. (Dumm) Attribute koennen im gegansatz dazu verschoben werden und bei jeder eingefuegten referenz auch anders sein. Sie sind VARIABEL.(Sie spiegeln den Text auch nicht) Mann kann sie setzen und auch auslesen. Geht mit Texten nicht so trivial. Weiterfuehrende Befehle zu Attributen sind BATTMAN - kein joke ATTSYNC Bei riesigen Zeichnungen dauert das attributaktualisieren ne weile deswegen muss es wohl EXPLIZIT angestossen werden mit _ATTSYNC. Wenn man Attribute in IRGENDEINER weise veraendert hat im Blockeditor ist einmal _attsync faellig. BATTMAN ist klasse um Attribute in der reihenfolge neu anzuordnen etc. Siehe auch YouTube, Google - uups und das druecken der F1 taste hilft auch mitunter...
------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dig15 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. für Markscheidewesen und Geodäsie
Beiträge: 5833 Registriert: 27.02.2003 DWG TrueView 2014
|
erstellt am: 24. Jun. 2013 20:57 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Hallo barbara, der Weg von rexxitall ist sicherlich der elegantere, aber was nützt mir der schönste Weg, wenn man nicht weiß was man macht? Scripte sind einfache ASCII Dateien (Textdateien) mit der Endung *.SCR, in denen die Befehlsfolge im Klartext enthalten ist. Schau Dir mal folgende Links (Beiträge) an. Klick1, Klick2, Klick3, Klick4, Klick5 Der letzte Link könnte am hilfreichsten sein. ------------------ Viele Grüße Lutz Glück Auf! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 24. Jun. 2013 21:53 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Hi nuja - die sache mit den SCR dateien ist halt ne Einbahnstrasse Spaetestens beim Aenderungsdienst wirds damit "abenteuerlich". Bei sowas lohnt wirklich - sie hat ein paar hundert "embedded parts" der minimale Einstieg in VBA. Optimal ist da eher ne firmenzentrale SQL Datenbank auf nem eigenen Server. Das "Excelwesen" ist auch keine dauerhafte Loesung - Ich benutz das auch nur bei einmal "fire and forget" aktionen. (Angenehmer als mit nem Texteditor CSV etc Daten zu erzeugen) Angenehm ist bei ner Datenbank die Daten dort vielfaeltig abgleichen und ABFRAGEN kann - und sie nicht erst muehsam aus diversen excel blattern wieder zusammenbosseln , oder (schlimmer) aus hunderten dwgs wieder extrahieren etc.) Ferner kann man bei ner Datenbankloesung sich auf die Anwender zugeschnittene Eingabemasken erstellen. Nicht jeder AZUBI ist ACAD Freak - kriegt es aber durchaus mit dem Instinkt des undressierten Kleinkindes hin - ne organisierte Zeichnung zu *zensiert* Kolege: "Ich hab mal alle Bloecke explodert weil ich die Texte nicht editieren konnte - nun sind aber alle texte ganaaanz komisch...." *ROFL* So richtig schick wirds mit nem SQL server im Internet. Da liegen die daten zentral fuer jeden (berechtigten) erreichbar und man hat bei ner Abfrage sekundenaktell den letzten Stand. Und na klar - Fachpersonal vorausgesetzt kann man diese Serverdaten mit allem moeglichem aktualisieren*, Kommentare zu den Parts hinzufuegen, Zusatzinfos (Bilder, Dokumente) * Wasauchimmer = Excel Openoffice - jedes CAD was in der Lage ist ASCII Daten zu erzeugen oder Datenbanken abzufragen usw.
Ich schieb da immer PDMS Abfrageergebnisse drauf. Ergaenz die wenn noetig mit Daten aus Excel Tabellen usw. (Im PDMS Modell sind nicht alle Werte die wir mitunter brauchen) Transformiere die Koordinaten... usw Ist lustig. "Wir brauchen mal alle Ankerplatten die an Tribuehne xyz gehen vom Aufmass im 3d Modelspace VBA : SQL="select * from blah where name = "anchorplate" and level >x and level < x2 and radius > u and radius < u2 " .... .... call draw_plate(dataset) ...
CLICK ... Ziggi qualmen gehn ... Wo soll ich die DWG ablegen ??? Fertig
------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbara33 Mitglied
Beiträge: 91 Registriert: 18.04.2007 Autocad 2013
|
erstellt am: 25. Jun. 2013 02:38 <-- editieren / zitieren --> Unities abgeben:
Hallo danke für Eure zahlreichen Antworten. Einiges verstehe ich, nachvollziehen fällt mir noch etwas schwer. Aber nun zum Hauptproblem. Ich habe es nun auf eigene Weise gelöst: In jede Excel-Zeile, in der zeilenweise die Einfügepunkte und Attributswerte stehen, habe ich eine Formel geschrieben, die sich aus den anderen Angaben generiert und so aussieht: ="(command ""_insert"" ""Marke"" """&G2&","&H2&""" """" """" """" """&A2&""" """&J2&""" """&I2&""")" Das ist eine Verkettung von Textstrings, die in Excel, ganau richtig für autoCAD, erzeugt wird. Diese habe ich nun hundert Mal in die AutoCAD Befehlszeile kopiert und damit jedes Mal einen neuen Block wie gewünscht erstellt. Das war schon eine große Erleichterung der Aufgabe. Eine Schwierigkeit dabei war auch, dass ich den Komma-Beistrich in Excel durch einen Komma-Punkt für AutoCAD ersetzen musste. Das habe ich mit einem Zwischenschritt in Excel gelöst. Dennoch: ich habe das Formelergebnis hundert Mal mit CTRL+C und CTRL+V rüber kopiert. Könnte man das wenigstens automatisieren? Wie könnte ich daraus eine Skript-Datei erstellen, mit der AutoCAD was anfangen kann, ohne jeden Einfügebefehl einzeln in Gang setzen zu müssen? Bitte ohne VBA, weil das bei mir nicht installiert ist. LG, Barbara [Diese Nachricht wurde von Barbara33 am 25. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 25. Jun. 2013 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Jetzt hast du einen nicht schönen aber funktionierenden Lispausdruck geschaffen, Du hättest das jetzt nur in eine Textdatei mit der Endung. .scr haben müssen, viola. In Acad mit SR starten. In jeder Zeile darf nur dein (command....)Ausdruck stehen,dann direkt der Zeilenwechsel(auch nach der letzten Zeile nur ein Zeilenwechsel, keine weiteren, kein Leerzeich. ------------------ Link: User:FAQ (einiges Wissenswertes über AutoCAD) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barbara33 Mitglied
Beiträge: 91 Registriert: 18.04.2007 Autocad 2013
|
erstellt am: 25. Jun. 2013 13:44 <-- editieren / zitieren --> Unities abgeben:
Wie kann man den "Insert"-Befehl in AutoCAD aufrufen, ohne dass sich ein Befehlsfenster öffnet? Ich glaube, damit ist die Skript-Zeile einfacher zu erstellen, weil man da sieht, wann welche Daten gefragt sind. Ich habe lange herumprobiert.. CADFFM, Deine ist die richtige Antwort. Genau das wollte ich wissen. Es geht. Dauert 5 Sekunden und nicht 5 Stunden händisch übertragen: Die Excel-Zeilen einfach in eine scr-Datei kopieren und diese dann in AutoCAD mit sr ausführen. Danke CADFFM. (Willst Du ein paar Unities? Wird darauf überhaupt Wert gelegt im Forum?) Einige Fußangeln sind dennoch zu beachten: OFang (F3) muss ausgeschaltet sein, sonst wird der Block nicht richtig platziert. Das Komma in AutoCAD ist immer ein Punkt, in Excel je nach Windows-Einstellung ein Beistrich (bei mir). Danke auch allen anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 25. Jun. 2013 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Unities nehme ICH persönlich gerne. Objektfang muß nicht ausgeschaltet werden, jedoch sollte jeder und immer die Systemvariable OSNAPCOORD auf 1 stellen !! Leider hat Acad die Voreinstellung auf 2 gesetzt und so produziert jeder mit einem Makro&Script(&Command/SendCommand) Fehler.. Also: Osnapcoord auf 1 (Optionen, Reiter Benutzereinstellungen, Priorität für Dateneingabe von Koordinaten auf "Tastatureingabe" stellen) Punkt. und Komma, sollten dir ja als Acadanwender bekannt sein, logisch. ------------------ Link: User:FAQ (einiges Wissenswertes über AutoCAD) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dig15 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. für Markscheidewesen und Geodäsie
Beiträge: 5833 Registriert: 27.02.2003 DWG TrueView 2014
|
erstellt am: 25. Jun. 2013 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Hallo Barbara, bin erst jetzt wieder im Büro. Schön, dass es geklappt hat. Unser Script (eine Zeile) sah so aus: Code: -einfüge PKT_0 4545689.595,5606568.981,468.382 0.1 0.1 0 5606568.98 4545689.60 468.38 311 1995
Die letzten vier Attribute wollte ACAD einfach auf einer neuen Zeile haben. Warum weiß ich nicht. Du kannst auch davor noch einen Ausdruck zur entsprechenden Layererstellung hinsetzten.------------------ Viele Grüße Lutz Glück Auf! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 25. Jun. 2013 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
|
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 25. Jun. 2013 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Zitat: Original erstellt von Barbara33: Wie kann man den "Insert"-Befehl in AutoCAD aufrufen, ohne dass sich ein Befehlsfenster öffnet?...
Aus dem Link von cadffm: Zitat: "WENN es zu einem Befehl eine zusätzliche Befehlszeilenversion gibt, dann wird diese mit vorangestelltem Minus "-" gestartet" also -einfüge (oder _-insert) Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 25. Jun. 2013 19:10 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
HI nuja du koenntest dir alternativ visual studio express runterladen upps ist ja auch nicht installiert ... Was hier getrieben wird ist halt bastel und frickel. Den VBA enabler gibts bei autodesk kostenlos. Du kannst acad mit LISP (Kann excel, access, mysql, oracle etc. nicht) C++ (fuer masochisten) vb.net (fuer masochistisch veranlagte literaten) und VBA ansteuern. Was hier betrieben wird ist meist DIESEL - heisst echt so. Aber warten wir mal ne weile bis dir das gefrickel auf den Geist geht. Vielleicht kommst du ja auch auf den trichter das man sich mit gelindem LERNAUFWAND das Leben deutlich einfacher gestalten kann. Und VBA ist echt fuer nichtprogrammierer geschrieben...
------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009 Epl 5.70 SC1 Epl P8 v 1.9 Int Sp1 Epl P8 v 2.0 Epl v 2.0 SP1 Epl P8 v 2.1 SP1 Epl P8 v 2.3 Office 2003;2007;2010 ACAD 2004;2006;2010,2014 WSCAD;Gimp
|
erstellt am: 12. Okt. 2015 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für Barbara33
Hallo, wie kann ich dieses Script start, habs in eine txt kopiert und mit Endung SCR gespeichert jeoch wird _$ als unbekannter Befehl erkannt, oder handelt es sich hier um einen Lisp code? Wird zwar geladen aber trotz Block in der Zeichnung tut sich nix. ------------------ The Man Who Knew Too Much
Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 12. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |