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 );
}
}