An open ribbon is a square with one side called the seam. A closed ribbon is a cylinder with one boundary component called the seam. We sew an open (resp. closed) ribbon onto a graph by identifying the seam with an open (resp. closed) walk in the graph. A ribbon complex is a graph with a finite number of ribbons sewn on. We investigate when a ribbon complex embeds in 3-dimensional Euclidean space. We give several characterizations of such spatial complexes which lead to algorithms. We examine special cases where (1) each edge of the graph is incident with at most three ribbons, and (2) every ribbon is closed together with a connectivity condition.