AutoFillGroupTable ( ListObject oGroupTable, AutoFillUserSettings oAutoFillUserSettings, AutoFillWorkbookResults oAutoFillWorkbookResults ) { Debug.Assert(oGroupTable != null); Debug.Assert(oAutoFillUserSettings != null); Debug.Assert(oAutoFillWorkbookResults != null); AutoFillNumericComparisonColumn(oGroupTable, oAutoFillUserSettings.GroupCollapsedSourceColumnName, GroupTableColumnNames.Collapsed, oAutoFillUserSettings.GroupCollapsedDetails ); if ( AutoFillColumnViaCopy(oGroupTable, oAutoFillUserSettings.GroupLabelSourceColumnName, GroupTableColumnNames.Label) && oAutoFillUserSettings.GroupLabelDetails.PrependWithGroupName ) { PrependGroupLabelsWithGroupNames(oGroupTable); } }
AutoFillWorkbookInternal ( Microsoft.Office.Interop.Excel.Workbook oWorkbook, AutoFillUserSettings oAutoFillUserSettings ) { Debug.Assert(oWorkbook != null); Debug.Assert(oAutoFillUserSettings != null); // Populate the vertex worksheet with the name of each unique vertex in // the edge worksheet. (new VertexWorksheetPopulator()).PopulateVertexWorksheet( oWorkbook, false); AutoFillWorkbookResults oAutoFillWorkbookResults = new AutoFillWorkbookResults(); AutoFillTable(oWorkbook, oAutoFillUserSettings, oAutoFillWorkbookResults, WorksheetNames.Edges, TableNames.Edges, AutoFillEdgeTable); AutoFillTable(oWorkbook, oAutoFillUserSettings, oAutoFillWorkbookResults, WorksheetNames.Vertices, TableNames.Vertices, AutoFillVertexTable); AutoFillTable(oWorkbook, oAutoFillUserSettings, oAutoFillWorkbookResults, WorksheetNames.Groups, TableNames.Groups, AutoFillGroupTable); // Save the results. (new PerWorkbookSettings(oWorkbook)).AutoFillWorkbookResults = oAutoFillWorkbookResults; }
AutoFillTable ( Microsoft.Office.Interop.Excel.Workbook oWorkbook, AutoFillUserSettings oAutoFillUserSettings, AutoFillWorkbookResults oAutoFillWorkbookResults, String sWorksheetName, String sTableName, AutoFillTableMethod oAutoFillTableMethod ) { Debug.Assert(oWorkbook != null); Debug.Assert(oAutoFillUserSettings != null); Debug.Assert(oAutoFillWorkbookResults != null); Debug.Assert(!String.IsNullOrEmpty(sWorksheetName)); Debug.Assert(!String.IsNullOrEmpty(sTableName)); Debug.Assert(oAutoFillTableMethod != null); ListObject oTable; ExcelHiddenColumns oHiddenColumns; if (ExcelTableUtil.TryGetTable(oWorkbook, sWorksheetName, sTableName, out oTable)) { // The TableColumnMapper class that does the actual autofilling // fills only visible cells. Temporarily show all hidden columns // in the table. oHiddenColumns = ExcelColumnHider.ShowHiddenColumns(oTable); try { oAutoFillTableMethod(oTable, oAutoFillUserSettings, oAutoFillWorkbookResults); } finally { ExcelColumnHider.RestoreHiddenColumns(oTable, oHiddenColumns); } } }
AutoFillWorkbook ( Microsoft.Office.Interop.Excel.Workbook workbook, AutoFillUserSettings autoFillUserSettings ) { Debug.Assert(workbook != null); Debug.Assert(autoFillUserSettings != null); Application oApplication = workbook.Application; oApplication.ScreenUpdating = false; try { AutoFillWorkbookInternal(workbook, autoFillUserSettings); } finally { oApplication.ScreenUpdating = true; } }
AddCollapsedGroupAttributesInternal ( Microsoft.Office.Interop.Excel.Workbook oWorkbook, ReadWorkbookContext oReadWorkbookContext, ListObject oEdgeTable, ListObject oVertexTable, GroupInfo[] aoGroups ) { Debug.Assert(oWorkbook != null); Debug.Assert(oReadWorkbookContext != null); Debug.Assert(oEdgeTable != null); Debug.Assert(oVertexTable != null); Debug.Assert(aoGroups != null); Debug.Assert(aoGroups.Length > 0); // Check whether relevant columns have been autofilled using numerical // source columns. PerWorkbookSettings oPerWorkbookSettings = new PerWorkbookSettings(oWorkbook); AutoFillColorColumnResults oVertexColorResults = oPerWorkbookSettings.AutoFillWorkbookResults.VertexColorResults; Boolean bVertexColorColumnAutoFilled = oVertexColorResults.ColumnAutoFilled && !oVertexColorResults.ColumnAutoFilledWithCategories; AutoFillColorColumnResults oEdgeColorResults = oPerWorkbookSettings.AutoFillWorkbookResults.EdgeColorResults; Boolean bEdgeColorColumnAutoFilled = oEdgeColorResults.ColumnAutoFilled && !oEdgeColorResults.ColumnAutoFilledWithCategories; AutoFillNumericRangeColumnResults oEdgeWidthResults = oPerWorkbookSettings.AutoFillWorkbookResults.EdgeWidthResults; Boolean bEdgeWidthColumnAutoFilled = oEdgeWidthResults.ColumnAutoFilled; // Some user settings for autofill may be needed. // // Note: This is a design bug. The user's current settings should not // be required; everything needed here should come from the autofill // results. The long-term fix is to add a UseLogs property to the // AutoFillColorColumnResults class. AutoFillUserSettings oAutoFillUserSettings = new AutoFillUserSettings(); ColorColumnAutoFillUserSettings oVertexColorDetails = oAutoFillUserSettings.VertexColorDetails; ColorColumnAutoFillUserSettings oEdgeColorDetails = oAutoFillUserSettings.EdgeColorDetails; NumericRangeColumnAutoFillUserSettings oEdgeWidthDetails = oAutoFillUserSettings.EdgeWidthDetails; // The key is the row ID for each visible row in the vertex table and // the value is value of the source column cell in that row that was // used to autofill the vertex color column, if it was autofilled. Dictionary <Int32, Object> oVertexColorSourceDictionary = bVertexColorColumnAutoFilled ? GetRowIDDictionary(oVertexTable, oVertexColorResults.SourceColumnName) : null; // Ditto for edge colors and edge widths. Dictionary <Int32, Object> oEdgeColorSourceDictionary = bEdgeColorColumnAutoFilled ? GetRowIDDictionary(oEdgeTable, oEdgeColorResults.SourceColumnName) : null; Dictionary <Int32, Object> oEdgeWidthSourceDictionary = bEdgeWidthColumnAutoFilled ? GetRowIDDictionary(oEdgeTable, oEdgeWidthResults.SourceColumnName) : null; // Only motifs need to have attributes added to them. foreach (ExcelTemplateGroupInfo oGroup in aoGroups.Where( oGroup => oGroup.CollapsedAttributes != null)) { CollapsedGroupAttributes oCollapsedGroupAttributes = CollapsedGroupAttributes.FromString( oGroup.CollapsedAttributes); String sType = oCollapsedGroupAttributes.GetGroupType(); if ( sType == CollapsedGroupAttributeValues.FanMotifType || sType == CollapsedGroupAttributeValues.DConnectorMotifType || sType == CollapsedGroupAttributeValues.CliqueMotifType ) { AddVertexColorAttributeToMotif(oGroup, sType, bVertexColorColumnAutoFilled, oVertexColorResults, oVertexColorDetails, oVertexColorSourceDictionary, oReadWorkbookContext, oCollapsedGroupAttributes); } if (sType == CollapsedGroupAttributeValues.DConnectorMotifType) { Int32 iAnchorVertices; if (oCollapsedGroupAttributes.TryGetValue( CollapsedGroupAttributeKeys.AnchorVertices, out iAnchorVertices)) { AddEdgeColorAttributesToDConnectorMotif(oGroup, bEdgeColorColumnAutoFilled, oEdgeColorResults, oEdgeColorDetails, oEdgeColorSourceDictionary, oReadWorkbookContext, oCollapsedGroupAttributes, iAnchorVertices); AddEdgeWidthAttributesToDConnectorMotif(oGroup, bEdgeWidthColumnAutoFilled, oEdgeWidthResults, oEdgeWidthDetails, oEdgeWidthSourceDictionary, oReadWorkbookContext, oCollapsedGroupAttributes, iAnchorVertices); } } oGroup.CollapsedAttributes = oCollapsedGroupAttributes.ToString(); } }
AutoFillVertexTable ( ListObject oVertexTable, AutoFillUserSettings oAutoFillUserSettings, AutoFillWorkbookResults oAutoFillWorkbookResults ) { Debug.Assert(oVertexTable != null); Debug.Assert(oAutoFillUserSettings != null); Debug.Assert(oAutoFillWorkbookResults != null); Boolean bSourceColumnContainsNumbers; Double dSourceCalculationNumber1, dSourceCalculationNumber2; Int32 iDecimalPlaces; ICollection <String> oCategoryNames; if (TryAutoFillColorColumn(oVertexTable, oAutoFillUserSettings.VertexColorSourceColumnName, VertexTableColumnNames.Color, oAutoFillUserSettings.VertexColorDetails, out bSourceColumnContainsNumbers, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces, out oCategoryNames )) { oAutoFillWorkbookResults.VertexColorResults = new AutoFillColorColumnResults( bSourceColumnContainsNumbers, oAutoFillUserSettings.VertexColorSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.VertexColorDetails.DestinationColor1, oAutoFillUserSettings.VertexColorDetails.DestinationColor2, oCategoryNames ); } AutoFillNumericComparisonColumn(oVertexTable, oAutoFillUserSettings.VertexShapeSourceColumnName, VertexTableColumnNames.Shape, oAutoFillUserSettings.VertexShapeDetails ); if (TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexRadiusSourceColumnName, VertexTableColumnNames.Radius, oAutoFillUserSettings.VertexRadiusDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces )) { oAutoFillWorkbookResults.VertexRadiusResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.VertexRadiusSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.VertexRadiusDetails. DestinationNumber1, oAutoFillUserSettings.VertexRadiusDetails. DestinationNumber2, oAutoFillUserSettings.VertexRadiusDetails.UseLogs ); } if (TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexAlphaSourceColumnName, CommonTableColumnNames.Alpha, oAutoFillUserSettings.VertexAlphaDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces )) { oAutoFillWorkbookResults.VertexAlphaResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.VertexAlphaSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.VertexAlphaDetails.DestinationNumber1, oAutoFillUserSettings.VertexAlphaDetails.DestinationNumber2, oAutoFillUserSettings.VertexAlphaDetails.UseLogs ); } AutoFillColumnViaCopy(oVertexTable, oAutoFillUserSettings.VertexLabelSourceColumnName, VertexTableColumnNames.Label ); TryAutoFillColorColumn(oVertexTable, oAutoFillUserSettings.VertexLabelFillColorSourceColumnName, VertexTableColumnNames.LabelFillColor, oAutoFillUserSettings.VertexLabelFillColorDetails, out bSourceColumnContainsNumbers, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces, out oCategoryNames ); AutoFillNumericComparisonColumn(oVertexTable, oAutoFillUserSettings.VertexLabelPositionSourceColumnName, VertexTableColumnNames.LabelPosition, oAutoFillUserSettings.VertexLabelPositionDetails ); AutoFillColumnViaCopy(oVertexTable, oAutoFillUserSettings.VertexToolTipSourceColumnName, VertexTableColumnNames.ToolTip ); AutoFillNumericComparisonColumn(oVertexTable, oAutoFillUserSettings.VertexVisibilitySourceColumnName, CommonTableColumnNames.Visibility, oAutoFillUserSettings.VertexVisibilityDetails ); TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexLayoutOrderSourceColumnName, VertexTableColumnNames.LayoutOrder, oAutoFillUserSettings.VertexLayoutOrderDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces ); Boolean bXAutoFilled = TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexXSourceColumnName, VertexTableColumnNames.X, oAutoFillUserSettings.VertexXDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces ); Double dYSourceCalculationNumber1, dYSourceCalculationNumber2; Boolean bYAutoFilled = TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexYSourceColumnName, VertexTableColumnNames.Y, oAutoFillUserSettings.VertexYDetails, out dYSourceCalculationNumber1, out dYSourceCalculationNumber2, out iDecimalPlaces ); if (bXAutoFilled && bYAutoFilled) { // (Note that the decimal places for the Y column take precedence // here.) oAutoFillWorkbookResults.VertexXResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.VertexXSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.VertexXDetails.DestinationNumber1, oAutoFillUserSettings.VertexXDetails.DestinationNumber2, oAutoFillUserSettings.VertexXDetails.UseLogs ); oAutoFillWorkbookResults.VertexYResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.VertexYSourceColumnName, dYSourceCalculationNumber1, dYSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.VertexYDetails.DestinationNumber1, oAutoFillUserSettings.VertexYDetails.DestinationNumber2, oAutoFillUserSettings.VertexYDetails.UseLogs ); } TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexPolarRSourceColumnName, VertexTableColumnNames.PolarR, oAutoFillUserSettings.VertexPolarRDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces ); TryAutoFillNumericRangeColumn(oVertexTable, oAutoFillUserSettings.VertexPolarAngleSourceColumnName, VertexTableColumnNames.PolarAngle, oAutoFillUserSettings.VertexPolarAngleDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces ); }
AutoFillEdgeTable ( ListObject oEdgeTable, AutoFillUserSettings oAutoFillUserSettings, AutoFillWorkbookResults oAutoFillWorkbookResults ) { Debug.Assert(oEdgeTable != null); Debug.Assert(oAutoFillUserSettings != null); Debug.Assert(oAutoFillWorkbookResults != null); Boolean bSourceColumnContainsNumbers; Double dSourceCalculationNumber1, dSourceCalculationNumber2; Int32 iDecimalPlaces; ICollection <String> oCategoryNames; if (TryAutoFillColorColumn(oEdgeTable, oAutoFillUserSettings.EdgeColorSourceColumnName, EdgeTableColumnNames.Color, oAutoFillUserSettings.EdgeColorDetails, out bSourceColumnContainsNumbers, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces, out oCategoryNames )) { oAutoFillWorkbookResults.EdgeColorResults = new AutoFillColorColumnResults( bSourceColumnContainsNumbers, oAutoFillUserSettings.EdgeColorSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.EdgeColorDetails.DestinationColor1, oAutoFillUserSettings.EdgeColorDetails.DestinationColor2, oCategoryNames ); } if (TryAutoFillNumericRangeColumn(oEdgeTable, oAutoFillUserSettings.EdgeWidthSourceColumnName, EdgeTableColumnNames.Width, oAutoFillUserSettings.EdgeWidthDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces )) { oAutoFillWorkbookResults.EdgeWidthResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.EdgeWidthSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.EdgeWidthDetails.DestinationNumber1, oAutoFillUserSettings.EdgeWidthDetails.DestinationNumber2, oAutoFillUserSettings.EdgeWidthDetails.UseLogs ); } AutoFillNumericComparisonColumn(oEdgeTable, oAutoFillUserSettings.EdgeStyleSourceColumnName, EdgeTableColumnNames.Style, oAutoFillUserSettings.EdgeStyleDetails ); if (TryAutoFillNumericRangeColumn(oEdgeTable, oAutoFillUserSettings.EdgeAlphaSourceColumnName, CommonTableColumnNames.Alpha, oAutoFillUserSettings.EdgeAlphaDetails, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces )) { oAutoFillWorkbookResults.EdgeAlphaResults = new AutoFillNumericRangeColumnResults( oAutoFillUserSettings.EdgeAlphaSourceColumnName, dSourceCalculationNumber1, dSourceCalculationNumber2, iDecimalPlaces, oAutoFillUserSettings.EdgeAlphaDetails.DestinationNumber1, oAutoFillUserSettings.EdgeAlphaDetails.DestinationNumber2, oAutoFillUserSettings.EdgeAlphaDetails.UseLogs ); } AutoFillNumericComparisonColumn(oEdgeTable, oAutoFillUserSettings.EdgeVisibilitySourceColumnName, CommonTableColumnNames.Visibility, oAutoFillUserSettings.EdgeVisibilityDetails ); AutoFillColumnViaCopy(oEdgeTable, oAutoFillUserSettings.EdgeLabelSourceColumnName, EdgeTableColumnNames.Label ); }
AutoFillWorkbookInternal ( Microsoft.Office.Interop.Excel.Workbook oWorkbook, AutoFillUserSettings oAutoFillUserSettings ) { Debug.Assert(oWorkbook != null); Debug.Assert(oAutoFillUserSettings != null); // Populate the vertex worksheet with the name of each unique vertex in // the edge worksheet. (new VertexWorksheetPopulator()).PopulateVertexWorksheet( oWorkbook, false); ListObject oTable; ExcelHiddenColumns oHiddenColumns; AutoFillWorkbookResults oAutoFillWorkbookResults = new AutoFillWorkbookResults(); if (ExcelUtil.TryGetTable(oWorkbook, WorksheetNames.Edges, TableNames.Edges, out oTable)) { // The TableColumnMapper class that does the actual autofilling // fills only visible cells. Temporarily show all hidden columns // in the table. oHiddenColumns = ExcelColumnHider.ShowHiddenColumns(oTable); try { AutoFillEdgeTable(oTable, oAutoFillUserSettings, oAutoFillWorkbookResults); } finally { ExcelColumnHider.RestoreHiddenColumns(oTable, oHiddenColumns); } } if (ExcelUtil.TryGetTable(oWorkbook, WorksheetNames.Vertices, TableNames.Vertices, out oTable)) { oHiddenColumns = ExcelColumnHider.ShowHiddenColumns(oTable); try { AutoFillVertexTable(oTable, oAutoFillUserSettings, oAutoFillWorkbookResults); } finally { ExcelColumnHider.RestoreHiddenColumns(oTable, oHiddenColumns); } } // Save the results. (new PerWorkbookSettings(oWorkbook)).AutoFillWorkbookResults = oAutoFillWorkbookResults; }