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;
            }
        }
Exemple #5
0
        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
                                  );
        }
Exemple #8
0
        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;
        }