AggregateGraphMetricsInternal
(
AggregateGraphMetricsAsyncArgs oAggregateGraphMetricsAsyncArgs,
BackgroundWorker oBackgroundWorker,
DoWorkEventArgs oDoWorkEventArgs
)
{
Debug.Assert(oAggregateGraphMetricsAsyncArgs != null);
Debug.Assert(oBackgroundWorker != null);
Debug.Assert(oDoWorkEventArgs != null);
AssertValid();
List<OverallMetricsInfo> oOverallMetricsInfos =
new List<OverallMetricsInfo>();
OverallMetricsReader oOverallMetricsReader =
new OverallMetricsReader();
foreach ( String sFilePath in Directory.GetFiles(
oAggregateGraphMetricsAsyncArgs.SourceFolderPath, "*.xlsx") )
{
if (oBackgroundWorker.CancellationPending)
{
oDoWorkEventArgs.Cancel = true;
return;
}
try
{
if (!NodeXLWorkbookUtil.FileIsNodeXLWorkbook(sFilePath))
{
continue;
}
}
catch (IOException)
{
// Skip any workbooks that are already open, or that have any
// other problems that prevent them from being opened.
continue;
}
oBackgroundWorker.ReportProgress(0,
String.Format(
"Reading \"{0}\"."
,
Path.GetFileName(sFilePath)
) );
OverallMetricsInfo oOverallMetricsInfo;
for (Int32 iAttempt = 0; iAttempt < 2; iAttempt++)
{
// Have overall metrics already been calculated for the
// workbook?
if ( TryGetGraphMetricsForOneNodeXLWorkbook(sFilePath,
out oOverallMetricsInfo) )
{
// Yes.
oOverallMetricsInfos.Add(oOverallMetricsInfo);
break;
}
if (iAttempt == 0)
{
// No. Calculate them.
TaskAutomator.AutomateOneWorkbookIndirect(sFilePath,
oAggregateGraphMetricsAsyncArgs.WorkbookSettings);
}
}
}
if (oOverallMetricsInfos.Count > 0)
{
WriteOverallMetricsToNewWorkbook(
oAggregateGraphMetricsAsyncArgs.Workbook.Application,
oOverallMetricsInfos);
}
oBackgroundWorker.ReportProgress(0,
String.Format(
"Done. NodeXL workbooks aggregated: {0}."
,
oOverallMetricsInfos.Count
) );
}