After doing a few tests, I came up with a solution that seems to work pretty well. I was fortunate that the Visio user put all of the objects in "Visio layers", so I could use a Definition Query to extract the pieces I wanted.
- Export Visio to DXF (as noted here: Transforming Visio polygon to shapefile?Transforming Visio polygon to shapefile?)
- I then created a model that:
a) Starts with the Polygon layer of the DXF. In my case the "building walls" lines came in as double-line gaps.
b) Used "Make Feature Layer" to assign a definition query to the polygon layer. The Definition Query extracted only the features in the "Building" Visio layer.
c) Dissolved the DXF Polygon layer (to make nice clean "walls")
d) Used "Feature to Polygon" to generate the "office" footprints.
e) Saved the final results in an Esri Geodatabase (but it could be any format, really).
- I chose to convert the DXF Annotation to points in a separate process (which represented employees, network jacks, etc). That way when employees change office locations, all I have to do is drag their "point" to the new office location and update the point attributes (if needed). In my case, multiple employees share an office space, so attaching the data to the polygon was more trouble that it was worth. I also found that the "anchor points" of the annotation were off to the upper left of the text, so I would not be able to automatically assign the label properties to the Polygons, anyway, without some manual editing, or at minimum offseting all of the points a certain distance to get them back to where they belong.
Alternatively, and depending on your need and the quality of your data, if there is DXF annotation that has anchor points within the "office walls", you could even use the "Label Features" option in the "Feature to Polygon" tool to automatically apply the annotation label data to the individual polygons.
The end result came out looking something like this, where the offices (and walls, and hallways) are polygons, and the employees are points. All have attributes associated with them (I've just turned off the labels for privacy):