WriteOverallMetricsToNewWorkbook
(
Microsoft.Office.Interop.Excel.Application oApplicationForNewWorkbook,
IList<OverallMetricsInfo> oOverallMetricsInfos
)
{
Debug.Assert(oApplicationForNewWorkbook != null);
Debug.Assert(oOverallMetricsInfos != null);
AssertValid();
Workbook oNewWorkbook =
oApplicationForNewWorkbook.Workbooks.Add(Missing.Value);
Int32 iOverallMetricsInfos = oOverallMetricsInfos.Count;
// There are 16 overall metrics, plus one extra column for the file
// name.
const Int32 Columns = 1 + 16;
// There is one extra row for the headers.
Object [,] aoCellValues =
ExcelUtil.Get2DArray<Object>(1 + iOverallMetricsInfos, Columns);
String [] asColumnHeaders = {
"File Name",
OverallMetricNames.Directedness,
OverallMetricNames.Vertices,
OverallMetricNames.UniqueEdges,
OverallMetricNames.EdgesWithDuplicates,
OverallMetricNames.TotalEdges,
OverallMetricNames.SelfLoops,
OverallMetricNames.ReciprocatedVertexPairRatio,
OverallMetricNames.ReciprocatedEdgeRatio,
OverallMetricNames.ConnectedComponents,
OverallMetricNames.SingleVertexConnectedComponents,
OverallMetricNames.MaximumConnectedComponentVertices,
OverallMetricNames.MaximumConnectedComponentEdges,
OverallMetricNames.MaximumGeodesicDistance,
OverallMetricNames.AverageGeodesicDistance,
OverallMetricNames.GraphDensity,
OverallMetricNames.Modularity,
};
Debug.Assert(asColumnHeaders.Length == Columns);
for (Int32 iColumn = 0; iColumn < Columns; iColumn++)
{
aoCellValues[1, iColumn + 1] = asColumnHeaders[iColumn];
}
for (Int32 i = 0; i < iOverallMetricsInfos; i++)
{
OverallMetricsInfo oOverallMetricsInfo = oOverallMetricsInfos[i];
OverallMetrics oOverallMetrics =
oOverallMetricsInfo.OverallMetrics;
Object [] aoColumnValues = {
oOverallMetricsInfo.NodeXLWorkbookFileName,
oOverallMetrics.Directedness.ToString(),
oOverallMetrics.Vertices,
oOverallMetrics.UniqueEdges,
oOverallMetrics.EdgesWithDuplicates,
oOverallMetrics.TotalEdges,
oOverallMetrics.SelfLoops,
OverallMetricCalculator2.NullableToGraphMetricValue<Double>(
oOverallMetrics.ReciprocatedVertexPairRatio),
OverallMetricCalculator2.NullableToGraphMetricValue<Double>(
oOverallMetrics.ReciprocatedEdgeRatio),
oOverallMetrics.ConnectedComponents,
oOverallMetrics.SingleVertexConnectedComponents,
oOverallMetrics.MaximumConnectedComponentVertices,
oOverallMetrics.MaximumConnectedComponentEdges,
OverallMetricCalculator2.NullableToGraphMetricValue<Int32>(
oOverallMetrics.MaximumGeodesicDistance),
OverallMetricCalculator2.NullableToGraphMetricValue<Double>(
oOverallMetrics.AverageGeodesicDistance),
OverallMetricCalculator2.NullableToGraphMetricValue<Double>(
oOverallMetrics.GraphDensity),
OverallMetricCalculator2.NullableToGraphMetricValue<Double>(
oOverallMetrics.Modularity),
};
Debug.Assert(aoColumnValues.Length == Columns);
for (Int32 iColumn = 0; iColumn < Columns; iColumn++)
{
aoCellValues[i + 2, iColumn + 1] = aoColumnValues[iColumn];
}
}
Worksheet oNewWorksheet = (Worksheet)oNewWorkbook.Worksheets[1];
// Insert the overall metrics into a table.
Range oTableRange = ExcelUtil.SetRangeValues(
(Range)oNewWorksheet.Cells[1, 1], aoCellValues );
ExcelTableUtil.AddTable(oNewWorksheet, oTableRange, null, null);
}