Excel > Speckle > Revit?

I would like to send Excel data to Speckle that will create a Revit model. The Excel data has everything you need (for instance, a Basic Wall would be: Level, Family, Family Type, Baseline geometry, UUID, etc.).
This seems totally doable, but not sure where to start. I can do it using Dynamo, but Speckle seems like it could be faster and easier.
I had mentioned my project in a post on the FME Connector Anyone? thread, which is how the data is generated. Really glad this is being worked on, but in the meantime, Excel will do.

If it’s a matter of creating a custom “RandoKit”, I’m up for the challenge but could take awhile! I am unclear on how kits fit into Speckle et al. The “deep dive” discussion seemed like you were still figuring things out. Super cool though.
Any insight is appreciated.



Hey Loren,

Thanks for the good question! We do not have a very streamlined process to achieve Excel > Revit yet, and if possible I’d recommend using our Grasshopper BIM nodes instead.

We would also love to learn more about your specific use case so we can update our connectors to support it as much as we can!

Anyways, if Excel is a requirement, I’d go about it this way.

Step 1:
I would use our Grasshopper BIM nodes to see what are the minimum necessary properties to create Revit elements from scratch by sending Grasshopper > Speckle a simple element so that you can see how it is structured in a “tabular” way.

Here it is in all its glory (notice it is just a line with wall metadata attached to it):

Step 2:

Receive it in Excel:

That will bring in quite a few columns! Each corresponds to a property/subproperty of the Speckle Wall class. You will also recognize that some of the column names, match some of the inputs in Grasshopper.
For instance, these are the coordinates of the start point of the wall base line:

And this is the Revit type name:


Step 3:
You can safely edit these values that correspond to GH inputs, and send the wall back to Speckle again. For instance, I changed the coordinates of the wall baseline start point.


NOTE: some properties like baseLine.bbox.basePlane.normal are not required to create the wall in Revit, and you don’t need to worry about them as they are primarily used to display correctly these objects in the web viewer.

Step 4:

Now you can receive the “Excel Wall” in Revit:


Here I first receive the Grasshopper wall and then the Excel one to show that the base point has been successfully updated.


Hi @teocomi ,
Really appreciate the thorough explanation! Very interesting you are suggesting Rhino/Grasshopper instead of Dynamo, which I am more familiar with. I work for the GSA in Region 9 (Pacific Rim) and my group has been working to develop our BIM program into something that other regions could emulate. We encounter the usual challenges of dealing with Revit models, updating, etc.

Let me back up and clarify why I am asking about Excel as the data source into Revit:

  1. I have developed a process where Revit-friendly data is derived from minimally-processed CAD floor plans using FME. Excel is just the go-between. I would prefer a direct link.
    A set of floor plans is processed all at once and written to an Excel file where each worksheet is a different category/type. Imagine one tab for walls, one for doors, columns, etc. In Revit, I use a large Dynamo graph to take the data and directly create the building in one pass. It works, but is slow and not easily deployable. But, it creates an LOD 200-300 Revit model programmatically in a VERY short amount of time and cheaply, compared to doing the same thing manually.

We manage hundreds of buildings that do not have models. Nationwide, it is over a thousand, not including leased spaces. To be able to quickly and cheaply generate these models would achieve a critical mass where the use of BIM tools start to make sense to leadership (and their budgets), instead of the old 2D way.

  1. Rescuing corrupt or un-upgradeable Revit models: In addition to creating Revit models from floor plans, you can extract the data (including geometry) using FME and fix or modify as needed, exporting to a table. Again, Excel is not required, but it’s available.

Ultimately, the vision is to do what Speckle was meant for: Maintaining, translating and sharing BIM data.

Questions: If Speckle can send and receive data from Excel which originated in Grasshopper, does this mean there is a mapping of attributes coming out of Grasshopper? If so, is it consistent, or, is it mapped per stream and therefore random-ish?

I still have bunch to learn, but like what I see so far!



1 Like

Hey Loren, thanks a lot for describing your workflow in detail!

I suggested GH simply because it’s currently the only non-BIM software that we have that is capable of creating Speckle “BIM elements”, this simply because many users we spoke with in the past had the need of controlling/generating Revit elements from GH, but you can definitely achieve the same from Dynamo as well.

After reading your explanation, my first thought is that we could add the same feature in FME letting you bypass Excel altogether. And as you’ve seen an FME connectors is already being developed: FME Connector anyone?.

I’d be curious to actually go a level deeper, how are you currently using FME? What sort of inputs does it take?

In reply to this, yes from GH we are generating “Speckle BIM” elements that have direct mapping to the Revit ones, see: Grasshopper | Speckle Docs

1 Like

Hi @teocomi,

When you say Speckle BIM elements have a direct mapping to Revit but not Excel>Revit (yet), are we essentially “tricking” Speckle into thinking it is GH or Dynamo? I am unclear on this. From your explanation, it seems like GH generates a wall which is translated into a Speckle BIM element and then output to Excel. When you send the stream back through Speckle and then on to Revit, is the Revit Connector reading Speckle elements or GH? Your code looks to me like you have everything mapped, so I must be missing something.

Here is a little more about my FME workflow:
Using CAD floor plans that have consistent layer names and a spreadsheet with level names and their elevations, elements (walls, doors, columns, etc) are filtered and treated mostly separately, except where they intersect (door headers, for example). For basic walls (not curtain), you can derive centerlines and wall thicknesses to create wall family type attributes using string manipulation, i.e. Generic - 9".
This is just one example of one process, but the concept is the same:

  • Get the geometry Revit wants,
  • Use measurements to identify FamilyType names,
  • Output attribute values usable in Dynamo.

The FME workspace is large (600+ transformers) after streamlining! Initially, I used a Revit file template pre-loaded with many wall family types, but you can also generate them in Dynamo from a spreadsheet output of unique wall types from FME. The resulting Revit model is quite accurate, but not perfect or comprehensive. This process works best with grid-type office buildings, but arc walls are also included. Elevations and facades are not addressed. That’s another project for later. Because CAD files can be quite dirty, there is a lot of redundant filtering and exploding before you have a usable centerline. The cleaner the CAD file, the better the result.

Another project I just started is to generate IFC files using a similar FME process, but with a custom writer plugin using IfcOpenShell. FME has an IfcWriter, but it does not have Types or Materials yet. Revit does not play well with IFC, so some post-process tweaking via Dynamo or Addin would have to be done. Unless, Speckle could translate the IFC into Revit? That would be awesome.

1 Like

Speckle works by converting elements from native applications into its own “object model” or “schema”, so yes, we already have mappings and it doesn’t really matter where data comes from.
In the case of Excel the challenge is structuring/providing the data in the right format, and it’s mainly a UI limitation. In GH or Dynamo we have much more flexibility!

Currently Speckle supports IFC uploads, but in this case we’re not converting their data to our own and so unfortunately you wouldn’t be able to receive them in Revit via Speckle just yet.

Given your workflow it seems that it should be definitely feasible to generate Speckle elements from FME, as soon as the connect is mature enough we can start looking into specific elements support.