in src/lib/Microsoft.Fx.Portability.Reports.Excel/ExcelOpenXmlOutputWriter.cs [450:515]
private void GenerateExceptionsPage(Worksheet worksheet, IList<ExceptionInfo> throwingMembers, IList<FrameworkName> targets)
{
var exceptionsPageHeader = new List<string>() { LocalizedStrings.AssemblyHeader, LocalizedStrings.TargetMemberHeader, LocalizedStrings.ExceptionColumnHeader };
exceptionsPageHeader.AddRange(_mapper.GetTargetNames(targets, alwaysIncludeVersion: true));
int exceptionRows = 0;
worksheet.AddRow(exceptionsPageHeader.ToArray());
exceptionRows++;
foreach (var member in throwingMembers.OrderBy(info => info.MemberDocId))
{
var exceptionsByType = member.ExceptionsThrown.GroupBy(exc => exc.Exception, (exception, exceptionList) => new { Key = exception, exceptions = exceptionList });
foreach (var grouping in exceptionsByType)
{
var rowContent = new List<object> { member.DefinedInAssemblyIdentity, member.MemberDocId, grouping.Key };
var groupsByTarget = grouping.exceptions.GroupBy(exc => new FrameworkName(exc.Platform, Version.Parse(exc.Version)), (framework, exceptionList) => new { Key = framework, exceptionsByPlatform = exceptionList });
foreach (var target in targets)
{
bool hasExceptions = false;
foreach (var exceptionsByTarget in groupsByTarget)
{
if (exceptionsByTarget.Key.Equals(target))
{
hasExceptions = true;
string resourceIDHolder = string.Empty;
foreach (var exception in exceptionsByTarget.exceptionsByPlatform.OrderBy(exc => exc.RID))
{
resourceIDHolder = string.Concat(resourceIDHolder, exception.RID + ";");
}
if (resourceIDHolder.Length > 0)
{
rowContent.Add(resourceIDHolder);
}
else
{
rowContent.Add(LocalizedStrings.NoExceptionNoted);
}
}
}
if (!hasExceptions)
{
rowContent.Add(LocalizedStrings.NoExceptionNoted);
}
}
worksheet.AddRow(rowContent.ToArray());
exceptionRows++;
}
}
worksheet.AddTable(1, exceptionRows, 1, exceptionsPageHeader.ToArray());
// Generate the columns
var columnWidths = new List<double>
{
ColumnWidths.DetailsPage.AssemblyName, // Assembly name
ColumnWidths.DetailsPage.TargetMember, // Target member
ColumnWidths.DetailsPage.TargetMember // Exception Width
};
columnWidths.AddRange(Enumerable.Repeat(ColumnWidths.Targets, targets.Count)); // Targets
worksheet.AddColumnWidth(columnWidths);
}