ImportEdges ( IGraph oSourceGraph, String [] asEdgeAttributes, ListObject oEdgeTable, Range oVertex1NameColumnData, Range oVertex2NameColumnData, Boolean bAppendToTable ) { Debug.Assert(oSourceGraph != null); Debug.Assert(oEdgeTable != null); Debug.Assert(oVertex1NameColumnData != null); Debug.Assert(oVertex2NameColumnData != null); Int32 iRowOffsetToWriteTo = 0; if (bAppendToTable) { iRowOffsetToWriteTo = ExcelTableUtil.GetOffsetOfFirstEmptyTableRow(oEdgeTable); ExcelUtil.OffsetRange(ref oVertex1NameColumnData, iRowOffsetToWriteTo, 0); ExcelUtil.OffsetRange(ref oVertex2NameColumnData, iRowOffsetToWriteTo, 0); } Range [] aoEdgeAttributeColumnData = null; Object [][,] aaoEdgeAttributeValues = null; Int32 iEdgeAttributes = 0; IEdgeCollection oEdges = oSourceGraph.Edges; Int32 iEdges = oEdges.Count; // Create vertex name and edge attribute arrays that will be written to // the edge table. Object [,] aoVertex1NameValues = ExcelUtil.GetSingleColumn2DArray(iEdges); Object [,] aoVertex2NameValues = ExcelUtil.GetSingleColumn2DArray(iEdges); if (asEdgeAttributes != null) { iEdgeAttributes = asEdgeAttributes.Length; aoEdgeAttributeColumnData = new Range[iEdgeAttributes]; aaoEdgeAttributeValues = new Object[iEdgeAttributes][, ]; ListColumn oEdgeAttributeColumn; Range oEdgeAttributeColumnData; for (Int32 i = 0; i < iEdgeAttributes; i++) { GetAttributeColumn(oEdgeTable, asEdgeAttributes[i], out oEdgeAttributeColumn, out oEdgeAttributeColumnData); if (bAppendToTable) { ExcelUtil.OffsetRange(ref oEdgeAttributeColumnData, iRowOffsetToWriteTo, 0); } aoEdgeAttributeColumnData[i] = oEdgeAttributeColumnData; aaoEdgeAttributeValues[i] = ExcelUtil.GetSingleColumn2DArray(iEdges); } } // Fill in the vertex name and edge attribute arrays. Int32 iEdge = 1; foreach (IEdge oEdge in oEdges) { IVertex [] aoVertices = oEdge.Vertices; aoVertex1NameValues[iEdge, 1] = aoVertices[0].Name; aoVertex2NameValues[iEdge, 1] = aoVertices[1].Name; Object oEdgeAttribute; for (Int32 i = 0; i < iEdgeAttributes; i++) { if (oEdge.TryGetValue(asEdgeAttributes[i], out oEdgeAttribute)) { aaoEdgeAttributeValues[i][iEdge, 1] = CleanUpAttributeValue(oEdgeAttribute); } } iEdge++; } // Write the vertex name and edge attribute arrays to the table. SetRangeValues((Range)oVertex1NameColumnData.Cells[1, 1], aoVertex1NameValues, false); SetRangeValues((Range)oVertex2NameColumnData.Cells[1, 1], aoVertex2NameValues, false); for (Int32 i = 0; i < iEdgeAttributes; i++) { SetRangeValues((Range)aoEdgeAttributeColumnData[i].Cells[1, 1], aaoEdgeAttributeValues[i], true); } }