Esempio n. 1
0
        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);
            }
        }