Revit Dynamo Tutorial - Excel Export

19. Juli 2016 AUTODESK AEC/BIM

Von unseren Kunden kommt immer wieder die Frage: Wie kann man Revit-Daten nach Excel exportieren bzw. Daten aus Excel wieder importieren?

Im folgenden Blogbeitrag stelle ich Ihnen daher eines unserer Dynamo Schulungsbeispiele, den Export von Autodesk-Revit Daten nach Excel, vor. Dieses Tutorial ist auch für Dynamo-Einsteiger geeignet. Anders als bei den mir bekannten Skripten zum Thema, kommt dieses Skript mit sehr wenigen Blöcken aus (es werden lediglich 10 Blöcke genutzt) und kann dennoch die Spalten in Excel beliebig erweitern.

Bereitstellung des fertigen Skriptes

Mit der hier gezeigten Schritt für Schritt Anleitung sollte Ihnen klar werden, wie man ein Skript zum Export von Excel aufbereiten könnte. Für alle diejenigen, die  das fertige Skript zunächst einmal testen wollen, ohne diese Anleitung durchzugehen, wird ihnen hier das fertige Skript bereitgestellt.

Name (Pflichtfeld)

E-Mail-Adresse (Pflichtfeld)

Firma (Pflichtfeld)

 

Das Skript wurde in Gruppierungen eingeteilt und kommentiert. Der Übersichtlichkeit halber habe ich mir angewöhnt alle Gruppen bei denen etwas eingegeben werden kann und soll „grün“ zu färben und Gruppen mit Blöcken, die rein zur Verarbeitung dienen, „orange“.

Um eine Liste zu erstellen, muss eine Kategorie der zu exportierenden Elemente gewählt werden und in einer Parameterliste die Bezeichnungen aller Parameter, die exportiert werden sollen angegeben werden. Zudem sind ggf. die Einstellungen für den Excel-Export (WriteToExcel) anzupassen.

Viel Spaß beim Testen!

Vorstellung der Schnittstelle zwischen Dynamo und Excel

Dynamo hat zwei Blöcke, die als Schnittstelle zu Excel dienen. Zum Schreiben von Daten nach Excel nutzen Sie den Block „Excel.WriteToFile“ und zum Auslesen von Daten
„Excel.ReadFromFile“.

Excel.WriteToFile benötigt folgende Eingabewerte:

  1. Den Pfad zur Exceldatei (filePath)
  2. Den Namen des Excel-Arbeitsblattes (sheetName)
  3. Die erste Zeile (startRow), in die die Daten geschrieben werden sollen
  4. Die erste Spalte (StartCol ), in die die Daten geschrieben werden sollen
  5. Die eigentlichen Daten (data) und
  6. Die Erlaubnis die bestehende Datei zu überschreiben (overWrite)

All diese Eingabewerte müssen im Vorfeld definiert und an den Block übergeben werden.

Dynamo: Daten Export nach Excel

Dynamo: Daten Export nach Excel

  • Fügen Sie einen „Excel.WriteToFile“ Block in Ihr Dynamo Skript ein!
  • Während der Skriptentwicklung sollten Sie zudem den Ausführungsmodus auf „Manuell“ stellen, um das ständige Ausführen des Skriptes zu unterbinden!

Die Definition der Eingabewerte

Es stellen sich die Fragen: Wie komme ich an die Eingabedaten? und In welcher Form müssen diese vorliegen?

Der Name der Eingabeschnittstellen sollte einen ersten Hinweis darauf geben, was, wo übergeben werden muss (Siehe Beschreibung Eingabewerte). Wenn Sie mit der Maus über die Eingabeschnittstellen gehen, wird Ihnen teilweise auch eine Beschreibung und der Datentyp angezeigt und Sie erhalten so eine Information über das erwartete Format der Eingabedaten.

Leider gibt es teilweise auch Blöcke, die nicht so eindeutig beschrieben sind, wie in diesem Beispiel. In solchen Fällen hilft nur viel Erfahrung bzw.  die Hilfe durch andere oder die gute alte Methode des Versuchs und des Irrtums.

Beschreibungstexte und Datentypen für Excel Export Dynamo

Beschreibungstexte und Datentypen in Dynamo

Die Übergabe des Dateipfades (filePath)

Der Dateipfad muss auf eine existierende Exceldatei zeigen und in Form eines Textes (string) an die Eingabeschnittstelle des Blockes „Excel.WriteToFile“ übergeben werden. Um dies zu garantieren, empfehle ich daher den Dynamo Block „File Path“ zu benutzen. Dieser Block nutzt einen „Datei öffnen“-Dialog, lässt Sie einen Dateipfad auswählen und gibt diesen als Text (string) zurück.
Suche nach einer Datei in Dynamo

Suche nach einer Datei in Dynamo

  • Fügen Sie links vom „Excel.WriteToExcel“ Block einen „File Path“ Block in Ihr Skript ein!
  • Verbinden Sie die Ausgabeschnittstelle (>) von „File Path“ mit der entsprechenden Eingabeschnittstelle (filePath) des Blockes „Excel.WriteToFile“!
  • Wählen Sie anschließend Ihre Excel Datei aus!

Die Übergabe der Arbeitsblattbezeichnung, sowie der Angangszeile und -spalte

Zur Übergabe der folgenden drei Eingabewerte nutze ich gern einen Codeblock. Codeblöcke eigenen sich sehr gut zur Erstellung von Eingabedaten, da diese beliebig viele verschiedene Werte, aber auch Funktionen beinhalten können und das Skript übersichtlich halten. Jeder Wert/Funktion innerhalb eines Codeblockes muss durch ein Semikolon abgeschlossen werden.Codeblöcke können durch einen Doppelklick im Editor eingefügt werden.

  • Fügen Sie links vom „Excel.WriteToExcel“ Block einen Codeblock ein!

Die Arbeitsblattbezeichnung muss erneut als Text (string) übergeben werden. Um innerhalb eines Codeblockes einen Text zu erzeugen, beginnen Sie einfach mit einem Gänsefüßchen („“), schreiben Sie Ihr Wort/ Ihren Text und schließen Sie diesen erneut mit einem Gänsefüßchen („“) ab. Der Text sollte nun in Rot im Codeblock stehen.

Dynamo Code Block

Dynamo Code Block

  • Schreiben Sie in den Codeblock die Arbeitsblatt-Bezeichnung!
  • Wenn Sie eine noch nicht verwendete Bezeichnung nutzen, wird ein neues Arbeitsblatt angelegt. Existiert das Arbeitsblatt, wird dieses evtl. überschrieben (siehe: „Die Festlegung ob eine Exceldatei überschrieben werden soll oder nicht“).

Die Angangszeile/ -spalte muss als Index in Form einer Zahl (int) übergeben werden. Hier genügt es, wenn Sie diese Zahl in den Codeblock schreiben und ein Semikolon als Trennzeichen zwischen Text bzw. den Zahlen nutzen. Bitte beachten Sie, dass die Indexierung in Excel nicht mit „Eins“ sondern intern mit „Null“ beginnt, Spalte A hat demnach den Index „Null“.
Übergabe von Einstellungen für Excel Export Dynamo

Übergabe von Einstellungen für Excel Export

  • Legen Sie im Codeblock die Anfangszeile/ -Spalte fest und verbinden Sie anschließend die Ausgabeschnittstellen (>) des
    Codeblockes mit den entsprechenden Eingabeschnittstellen des Blockes „Excel.WriteToFile“!

Die Zusammenstellung der Übergabedaten für Excel

Kommen wir nun zum aufwändigsten Teils des Skriptes, der Zusammenstellung der Exportdaten (data). Ich werde hier etwas detaillierten auf meine Gedankengänge eingehen.

Ziel sollte es der Einfachheit halber zunächst sein, Revit-Parameterwerte in eine Excelliste zu bekommen. Natürlich könnten Sie neben diesen Parameterwerten z.B. auch in Dynamo errechnete Werte, oder z.B. die XYZ Koordinaten mit ausgeben.

Um an Parameterdaten heran zu kommen, benötig man zunächst einmal Revit-Elemente, die für einen Export in Frage kommen. Diese könnten mittels Dynamo selektiert oder gefiltert werden. Die passenden Blöcke finden Sie in der Dynamo-Kategorie Revit > Selection. Ich habe mich für eine Filterung nach allen Elementen einer bestimmten Kategorie entschieden und nutze daher den Block „All Elements of Category“.

Dieser Block erfordert als Eingabe eine Kategorie (category). Die Kategorie erhalten Sie durch den Block „Category“. Dieser Block lässt Sie eine Kategorie wählen und gibt eine Referenz auf das in Revit intern genutzte Element zurück. Genau diese Referenz wird von der Eingabeschnittstelle des Blockes „All Elements of Category“ benötigt.

Erstellung einer Filterung in Dynamo

Erstellung einer Filterung in Dynamo

  • Fügen Sie links im Skript die Blöcke „Category“ und „All Elements of Category“ ein!
    (Bitte lassen Sie dabei einen gewissen Abstand vom bisherigen Skript, da zwischen den Blöcken „All Elements of Category“ und „Excel.WriteToFile“ weitere Blöcke eingefügt werden )
  • Verbinden Sie die Blöcke miteinander!
  • Wählen Sie eine Kategorie!

Beim Ausführen des Skriptes hätten Sie nun eine Liste mit Elementen, deren Parameter Sie auslesen könnten. (Nutzen Sie ggf. einen Watch-Block, um sich diese Liste anzeigen zu lassen)

Nun gilt es, aus diesen Elementen Parameter auszulesen und diese in einer Liste so aufzubereiten, dass Sie dem erwarteten Datenformat der Eingabeschnittstelle „data“ des Blockes „Excel.WriteToFile“ entsprechen. Hier wird eine verschachtelte Liste (Baumstruktur) erwartet. Die Hauptknoten des Baumes repräsentieren die Elemente (Zeilen in Excel) und die Unterknoten die Parameterwerte (je Parameter eine Spalte)

Ein solcher Baum, könnte wie folgt aussehen:

–  Element 1
—–> Parameterwert 1
—–> Parameterwert 2
—–> …
—–> Parameterwert x
–  Element 2
—–> Parameterwert 1
—–> Parameterwert 2
—–> …
—–> Parameterwert x

Die eigentlichen Parameterwerte können Sie mit dem Block „Element.GetParameterValueBy
Name“ abfragen. Dieser Block erwartet ein Element und einen Parameternamen, um anhand des Namens den eigentlichen Parameterwert zu ermitteln.
RevitParameter in Dynamo abfragen

Revit Parameter in Dynamo abfragen

  • Fügen Sie einen „Element.GetParameterValueByName“ Block zwischen „All Elements of Category“ und „Excel.WriteToFile“ ein!
  • Verbinden Sie die Ausgabeschnittstelle (>) des Blockes „All Elements of Category“ mit der Eingabeschnittstelle „Element“ des
    Blockes „Element.GetParameterValueByName“!

Die Eingabeschnittstelle verlangt einen Parameternamen in Form einer Textes (string). Dieser Text kann erneut durch einen Codeblock bereitgestellt werden.

Nutzung eines Code Blockes mit Texten

Nutzung eines Code Blockes mit Texten

  • Fügen Sie links des Blockes „Element.GetParameterValueByName“ einen Codeblock ein und schreiben Sie den Parameternamen eines zu exportierenden Parameterwertes in den Codeblock!
  • Geben Sie ggf. weitere Parameternamen an!
    (Vergessen Sie dabei nicht die Gänsefüßchen!)

Sie würden durch die Verbindung des Parameternamens mit der entsprechenden Eingabeschnittstelle , z.B. das Kennzeichen eines Elementes an Excel übergeben. In der Regel wollen Sie jedoch mehrere Parameter übergeben. Darum sollten Sie einen kleinen, aber entscheidenden Trick anwenden und der Eingabeschnittstelle nicht nur einen Parameternamen, sondern eine ganze Liste von Parametern übergeben.

Eine Liste kann mit dem Block „List.Create“ erzeugt werden. Sie erhalten einen Block bei dem Sie mittels „+“ und „-“ festlegen können, wie viele Elemente die Liste hat.

Parameterlisten mit Dynamo erstellen

Parameterlisten mit Dynamo erstellen

  • Erzeugen Sie eine mit Hilfe des „List.Create“-Blockes eine Liste!
  • Weisen Sie die Namen aller Parameter, die Sie exportieren möchten, zu!
  • Verbinden Sie die Liste mit der Eingabeschnittstelle „parameterName“ des Blockes „Element.GetParameterValueByName“!

Fast geschafft! Nun müssen Sie nur noch das Verkettungsverfahren des Blockes
„Element.GetParameterValueByName“ von Kürzestes auf Kreuzprodukt umstellen. Dies hat zur Folge, dass für jedes gefundene Element, alle Parameter aus der Liste ausgegeben zu der oben beschriebenen Baumstruktur zusammengefasst werden.

Änderung der Vergitterung in Dynamo

Änderung der Vergitterung in Dynamo

  • Ändern Sie im Block „Element.GetParameterValueByName“ das Vergitterungsverfahren auf Kreuzprodukt!

Den letzten Schritt den Sie tun sollten bevor Sie ihre Daten an Excel übergeben, ist das Einfügen einer Kopfzeile. Die Spaltennamen haben Sie bereits in Form der Parameterliste vorliegen. Diese müssen Sie nun nur noch vor die eigentlichen Parameterwerte setzen, sodass der Baum anschließend wie folgt aussieht:

– Kopfzeile
—–> Parametername 1
—–> Parametername 2
—–> …
—–> Parametername x
– Element 1 (1. Tabellenzeile 1 in Excel)
—–> Parameterwert 1 (Spalte 1 in Excel)
—–> Parameterwert 2 (Spalte 2 in Excel)
—–> …
—–> Parameterwert x
– Element 2 (2. Tabellenzeile in Excel)
—–> Parameterwert 1
—–> Parameterwert 2
—–> …
—–> Parameterwert x
– …Um zu Beginn eine Liste einzufügen, können Sie den Block „List.AddItemToFront“ nutzen.
Übergabe von Daten für Excel Export

Übergabe von Daten für Excel Export

  • Fügen Sie einen „List.AddItemToFront“ Block zwischen dem „Element.GetParameterValueByName“- und dem
    „Excel.WriteToFile“ Block ein!
  • Verbinden Sie anschließend die Ausgabeschnittstelle (list) des Blockes „List.Create“ mit der Eingabeschnittstelle „item“ des
    Blockes „List.AddItemToFront“!
  • Verfahren Sie genau so mit der Ausgabeschnittstelle (var[][]) des Blockes „Element.GetParameterValueByName“ und der
    Eingabeschnittstelle „list“ des Blockes „List.AddItemToFront“!
  • Verbinden Sie anschließend die Ausgabeschnittstelle (list) des Blockes „List.AddItemToFront“ mit der Eingabeschnittstelle „data“ des Blockes „Excel.WriteToFile“!

Damit ist die Datenaufbereitung und Übergabe an Excel abgeschlossen.

Die Festlegung ob eine Exceldatei überschrieben werden soll oder nicht

Nun bleibt Ihnen nur noch eine Eingabeschnittstelle (overWrite) die Sie belegen müssen. Diese Schnittstelle erwartet als Eingabewert einen boolschen Wert, d.h. „wahr“ (true) oder „falsch“ (false). Sie bestimmen damit, ob die Exceldatei überschrieben werden soll („wahr“) oder nicht („falsch“). Nutzen Sie hierzu den Block „Boolean“.

Damit ist ihr Skript fertig! Beim Starten des Skriptes werden Ihnen nun alle Parameterwerte nach Excel exportiert.

Dynamo Skript für Excel Export

Dynamo Skript für Excel Export

  • Fügen Sie Ihrem Skript einen „Boolean“ Block hinzu und verbinden Sie diesen mit der verbliebenen Eingabeschnittstelle!
  • Setzen Sie zunächst den Wert von „Boolean“ auf true!

Abschließende Worte

Der ein oder andere wird sich vielleicht gefragt haben, warum ich das Skript von rechts nach links aufgebaut habe?! Nun, dies ist eine Methode, die ich gerne „Das Pferd von hinten aufziehen“ nenne und die für die Erstellung eigener Skripte sehr nützlich sein kann. Die beruht auf der Annahme, dass man weiß, welches Ziel man am Ende hat, aber eben noch nicht ganz, wie man dort hin kommt. Daher der Ansatz zu schauen, welche Eingabe Daten man braucht und wie man sich diese durch andere Blöcke besorgen kann.

Das hier vorgestellte Beispiel ist eines von vielen in meinem Dynamo-Schulungen. Die Schulungen geben einige Schulungsbeispiele vor, können aber auch individuell mit im Vorfeld abgesprochenen Kundenwünschen angereichert werden. Die Schulungsbeispiele unserer Schulung werden dem Nutzer alle zur Verfügung gestellt.

Da ich bereits festgestellt habe, dass immer wieder Inhalte noch nicht durch Dynamo-Blöcke abgedeckt werden, habe ich begonnen einige nützliche Blöcke selbst zu programmieren. Auch dieses Know How wird in unseren Schulungen weitergegeben.

Sie haben nicht die Zeit für einen oder sogar mehrere Schulungstage? Kein Problem, wir bieten neben den Schulungen auch Webseminare zu kundenindividuellen Themen an!
Wie wäre es beispielsweise, wenn Sie alles zum Thema Excel-Import in einem 1- 2 stündigen Webseminar erfahren könnten. Schreiben Sie uns?

 


2 Kommentare


Heinrich Boldt sagt:

Hallo,

ich habe Ihr Script genommen und für das Thema Türen umgewandelt.
Die Parameter werden gelesen und eingefügt.

Ich habe im Dynamo-Forum ein Script gesehen und diese nachgebaut, weit komplexer, aber das Script hat die Daten lediglich nach Excel eingetragen und nicht die Vorformatierung überschrieben – was gerade bei Türen eine sehr wichtige Sache ist. Bei Räumen kann ich mir auch vorstellen, das es interessant ist, die Spalten in einer Vorlagen.XLS so zu Formatieren und mit einem Kopf versehen, das es dem Firmenstandard entspricht.

PS: den Import der Daten sauber zu steuern interessiert mich sehr.

Gruß
Heinrich Boldt

Christian Kellner sagt:

Vielen Dank für das positive Feedback und die Anregung.

Leider sehen die bisher in Dynamo bereitgestellten Blöcke keinen Export unter Beachtung von Vorformatierung vor.

Ich plane derzeitig die Entwicklung eigener Dynamo-Blöcke, die bisher fehlende Anforderungen abdecken. Ihr Vorschlag könnte durchaus mit umgesetzt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwandte Beiträge

Vorlagen in Revit

19. Oktober 2017 AUTODESK AEC/BIM

Als Planer im täglichen Geschäft versucht man ja immer, mit möglichst wenig Aufwand an sein Ziel zu kommen. Gerade wenn man mit Autodesk Revit arbeitet, ist es möglich, sich hier einige Arbeitsschritte vom Programm abnehmen zu lassen und so Zeit zu sparen.

Productivity Tools für AutoCAD Civil 3D 2018 – Teil 1

29. September 2017 AUTODESK AEC/BIM

Viele C3D-Anwender kennen die DACH Extension und das Country Kit – doch es gibt immer noch viele Unklarheiten. Die DACH Extension ist NICHT Bestandteil des Country Kits, sondern eine eigenständige Anwendung – genauso wie die ISYBAU Extension, welche momentan für C3D 2018 noch nicht verfügbar ist!

Erweiterung der AEC Collection

19. September 2017 AUTODESK AEC/BIM

Die AEC Collection ist das essentielle BIM-Paket für den Hoch-, Tief- und Ausbau. Sie enthält alles, was Sie für die Planung hochwertiger, nachhaltiger Gebäude brauchen. Zum 7. September wurde die AEC Collection um sechs Produkte erweitert.

© 2017 N+P Informationssysteme GmbHNewsletter anmeldenKarriereKontaktImpressum