private void GenerateSummaryPage(Worksheet summaryPage, ReportingResult analysisResult) { var targetNames = _mapper.GetTargetNames(analysisResult.Targets, alwaysIncludeVersion: true); // This is the submission id summaryPage.AddRow(LocalizedStrings.SubmissionId, AddSubmissionLink(analysisResult.SubmissionId)); // This is the description of the app summaryPage.AddRow(LocalizedStrings.Description, _description); // This is the target list that was submitted to the service. summaryPage.AddRow(LocalizedStrings.Targets, string.Join(",", targetNames)); // Add an empty row. summaryPage.AddRow(); if (analysisResult.GetAssemblyUsageInfo().Any()) { var assemblyInfoHeader = new List <string> { LocalizedStrings.AssemblyHeader, "Target Framework" }; assemblyInfoHeader.AddRange(targetNames); int tableRowCount = 0; summaryPage.AddRow(assemblyInfoHeader.ToArray()); tableRowCount++; foreach (var item in analysisResult.GetAssemblyUsageInfo().OrderBy(a => a.SourceAssembly.AssemblyIdentity)) { var summaryData = new List <object>() { analysisResult.GetNameForAssemblyInfo(item.SourceAssembly), item.SourceAssembly.TargetFrameworkMoniker ?? string.Empty }; // TODO: figure out how to add formatting to cells to show percentages. summaryData.AddRange(item.UsageData.Select(pui => (object)Math.Round(pui.PortabilityIndex * 100.0, 2))); summaryPage.AddRow(summaryData.ToArray()); tableRowCount++; } summaryPage.AddConditionalFormatting(6, analysisResult.GetAssemblyUsageInfo().Count(), 3, analysisResult.Targets.Count); summaryPage.AddTable(5, tableRowCount, 1, assemblyInfoHeader.ToArray()); var columnWidths = new List <double> { ColumnWidths.SummaryPage.AssemblyName, ColumnWidths.SummaryPage.TFM }; columnWidths.AddRange(Enumerable.Repeat(ColumnWidths.Targets, analysisResult.Targets.Count)); // Targets summaryPage.AddColumnWidth(columnWidths); } summaryPage.AddRow(); summaryPage.AddRow(LocalizedStrings.CatalogLastUpdated, _catalogLastUpdated.ToString("D", CultureInfo.CurrentCulture)); summaryPage.AddRow(LocalizedStrings.HowToReadTheExcelTable); }