Exemple #1
0
        private static Word.Application GetActiveWordApp(COMObjectsHelper comHelper)
        {
            var wordApplications = COMObjectsHelper.GetActiveInteropApp <Word.Application>(comHelper, MSWORD_INTEROP_APP_NAME)
                                   ?? throw new InvalidInteropOperationException($"Could not find any {MSWORD_INTEROP_APP_NAME} application.");

            return(wordApplications.Find(app => comHelper.Register(() => app?.ActiveWindow) != null));
        }
Exemple #2
0
        private static void AddDocumentContentPerformance(Excel.Worksheet sheet, IEnumerable <char> values)
        {
            using (var comHelper = new COMObjectsHelper())
            {
                try
                {
                    Excel.Range activeCell = null;
                    var         rowIndex   = 0;
                    var         cells      = comHelper.Register(() => sheet.Cells);
                    do
                    {
                        ++rowIndex;
                        activeCell = comHelper.Register(() => cells[rowIndex, 1]);
                    } while (!string.IsNullOrEmpty((string)activeCell.Value2));

                    foreach (var value in values)
                    {
                        activeCell.Value2 = value;
                        ++rowIndex;
                        activeCell = comHelper.Register(() => cells[rowIndex, 1]);
                    }
                }
                catch (COMException)
                {
                    throw new InvalidInteropOperationException("Failed to add content to the worksheet, because of COMException.");
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Adds passed string into an active word document.
        /// </summary>
        /// <param name="value">String to add to document.</param>
        /// <param name="title">Title in a correct format.</param>
        /// <exception cref="ArgumentNullException">Thrown when the content string is null.</exception>
        /// <exception cref="InvalidInteropOperationException">Thrown when content cannot be added.</exception>
        public static void AddDocumentContent(string value, string title)
        {
            if (value == null)
            {
                throw new ArgumentNullException("Content should not be null.");
            }

            using (var comHelper = new COMObjectsHelper())
            {
                var wordApp = GetActiveWordApp(comHelper)
                              ?? throw new InvalidInteropOperationException($"Could not find any {MSWORD_INTEROP_APP_NAME} application with active window.");

                // Note: This property controls the visibility of alert dialogs
                wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;

                var windows = comHelper.Register(() => wordApp.Windows);

                // Note: It may happen when we have multiple processes of app and the object given by interop doesn't have windows.
                if (windows.Count == 0)
                {
                    throw new InvalidInteropOperationException("MS Word application interop object doesn't contain windows.");
                }

                var document = FindDocument(windows, comHelper, title)
                               ?? throw new InvalidInteropOperationException($"MS Word document with a given title: {title} wasn't found.");

                AddDocumentContent(document, value);
            }
        }
Exemple #4
0
        /// <summary>
        /// Adds passed string into an active excel workbook in the first free cell.
        /// </summary>
        /// <param name="value">String to add to workbook.</param>
        /// <param name="title">Title in a correct format.</param>
        /// <exception cref="ArgumentNullException">Thrown when the content string is null.</exception>
        /// <exception cref="InvalidInteropOperationException">Thrown when content cannot be added.</exception>
        public static void AddDocumentContent(string value, string title)
        {
            if (value == null)
            {
                throw new ArgumentNullException("Content should not be null.");
            }

            // Note: When add content happens in the same time with create new document it breaks excel tests.
            lock (interopProcessLockObject)
            {
                using (var comHelper = new COMObjectsHelper())
                {
                    var excelApp = GetActiveExcelApp(comHelper)
                                   ?? throw new InvalidInteropOperationException("Cannot obtain MS Excel application interop object from ROT table.");

                    // Note: This property controls the visibility of alert dialogs
                    excelApp.DisplayAlerts = false;

                    var windows = comHelper.Register(() => excelApp.Windows);

                    // Note: It may happen when we have multiple processes of app and the object given by interop doesn't have windows.
                    if (windows.Count == 0)
                    {
                        throw new InvalidInteropOperationException("MS Excel application interop object doesn't contain windows.");
                    }

                    var activeSheet = FindActiveSheet(windows, comHelper, title)
                                      ?? throw new InvalidInteropOperationException($"MS Excel sheet with a given title: {title} wasn't found.");

                    AddDocumentContent(activeSheet, value);
                }
            }
        }
Exemple #5
0
        private static PowerPoint.Application GetActivePowerPointApp(COMObjectsHelper comHelper)
        {
            var ppApplications = COMObjectsHelper.GetActiveInteropApp <PowerPoint.Application>(comHelper, MSPOWERPOINT_INTEROP_APP_NAME)
                                 ?? throw new InvalidInteropOperationException($"Could not find any {MSPOWERPOINT_INTEROP_APP_NAME} application.");

            return(ppApplications.Find(app => comHelper.Register(() => app.ActiveWindow) != null));
        }
Exemple #6
0
        /// <summary>
        /// Gets full file name that is currently opened in an active document.
        /// </summary>
        /// <returns>Full file name.</returns>
        public static string GetActiveDocumentFileName()
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var wordApp = GetActiveWordApp(comHelper);

                return(comHelper.Register(() => wordApp.ActiveDocument)?.FullName);
            }
        }
        /// <summary>
        /// Resolves extensibility COM object and creates new instance of ExtensibilityInformationHelper.
        /// </summary>
        /// <returns>ExtensibilityInformationHelper object instance.</returns>
        public ExtensibilityInformationHelper ResolveService()
        {
            comHelper = new COMObjectsHelper();

            if (extensibilityInformation == null)
            {
                extensibilityInformation = comHelper.Register(() => (IExtensibilityInformation)TypeHelper.GetInstance(InterfacesIds.NETDOCUMENTS_EXTENSIBILITY_EXTENSIBILITYINFORMATION_PROG_ID));
            }
            return(this);
        }
Exemple #8
0
        /// <summary>
        /// Gets a title of an active word document.
        /// </summary>
        /// <returns>Active document title.</returns>
        public static string GetActiveDocumentTitle()
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var wordApp = GetActiveWordApp(comHelper)
                              ?? throw new InvalidInteropOperationException($"Could not find any {MSWORD_INTEROP_APP_NAME} application with active window.");

                return(comHelper.Register(() => wordApp.ActiveWindow)?.Caption);
            }
        }
Exemple #9
0
        /// <summary>
        /// Gets full file name that is currently opened in an active powerpoint presentation.
        /// </summary>
        /// <returns>Full file name.</returns>
        public static string GetActiveDocumentFileName()
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var powerpointApp = GetActivePowerPointApp(comHelper)
                                    ?? throw new InvalidInteropOperationException($"Could not find any {MSPOWERPOINT_INTEROP_APP_NAME} application with active window.");

                return(comHelper.Register(() => powerpointApp.ActivePresentation)?.FullName);
            }
        }
Exemple #10
0
        /// <summary>
        /// Gets full file name that is currently opened in an active workbook.
        /// </summary>
        /// <returns>Full file name.</returns>
        public static string GetActiveWorkbookFileName()
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var excelApp = GetActiveExcelApp(comHelper)
                               ?? throw new InvalidInteropOperationException("Cannot obtain MS Excel application interop object from ROT table.");

                return(comHelper.Register(() => excelApp.ActiveWorkbook)?.FullName);
            }
        }
Exemple #11
0
 private static void RemoveSlides(PowerPoint.Slides slides, COMObjectsHelper comHelper, bool forceRemoveAll = false)
 {
     for (int i = slides.Count; i > 0; --i)
     {
         var slide = comHelper.Register(() => slides[i]);
         if (forceRemoveAll || IsSlideEmpty(slide, comHelper))
         {
             slide.Delete();
         }
     }
 }
Exemple #12
0
        /// <summary>
        /// Resolves extensibility COM object and creates new instance of ExtensibilityService2Helper.
        /// </summary>
        /// <returns>ExtensibilityService2Helper object instance.</returns>
        /// <exception cref="System.InvalidOperationException">Thrown when login into extensibility failed with any error.</exception>
        public ExtensibilityService2Helper ResolveService(IAuthorizationContext authorizationContext)
        {
            comHelper = new COMObjectsHelper();

            if (extensibilityService2 == null)
            {
                extensibilityService2 = comHelper.Register(() => (IExtensibilityService2)TypeHelper.GetInstance(InterfacesIds.NETDOCUMENTS_EXTENSIBILITY_SERVICE_2_PROG_ID));

                extensibilityService2.SetAuthorizationContext(authorizationContext);
            }
            return(this);
        }
Exemple #13
0
        public static void CreateNewDocument(string path, string[] content)
        {
            lock (interopProcessLockObject)
            {
                using (var comHelper = new COMObjectsHelper())
                {
                    Word.Application wordApp = null;
                    try
                    {
                        var isVisible = false;

                        wordApp         = comHelper.Register(() => new Word.Application());
                        wordApp.Visible = isVisible;

                        var documents = comHelper.Register(() => wordApp.Documents);

                        object readOnly     = false;
                        object isAppVisible = isVisible;
                        object documentType = Word.WdNewDocumentType.wdNewBlankDocument;

                        var document   = comHelper.Register(() => documents.Add(DocumentType: ref documentType, Visible: ref isAppVisible));
                        var docContent = comHelper.Register(() => document.Content);
                        docContent.Text = string.Join(Environment.NewLine, content);

                        var paragraphs    = comHelper.Register(() => document.Paragraphs);
                        var lastParagraph = comHelper.Register(() => paragraphs.Last);
                        var range         = comHelper.Register(() => lastParagraph.Range);
                        if (range.Text.Trim() == string.Empty)
                        {
                            range.Select();
                            var selection = comHelper.Register(() => wordApp.Selection);
                            selection.Delete();
                        }

                        object savePath = path.Clone();
                        document.SaveAs2(ref savePath);
                        document.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Document creation failed with error: {ex.Message}. Exception: {ex}.");
                        throw;
                    }
                    finally
                    {
                        // Note: We always should manually quit from application,
                        // because Release() only decreases references counter.
                        wordApp?.Quit();
                    }
                }
            }
        }
Exemple #14
0
        private static void CreateNewDocument(COMObjectsHelper comHelper, PowerPoint.Application ppApp, string path, IEnumerable <char> content)
        {
            var presentations = comHelper.Register(() => ppApp.Presentations);

            object readOnly = false;

            var presentation = comHelper.Register(() => presentations.Add(MsoTriState.msoFalse));

            AddDocumentContent(presentation, string.Concat(content));

            presentation.SaveAs(path);
            presentation.Close();
        }
Exemple #15
0
        private static void AddDocumentContent(PowerPoint.Presentation presentation, string content)
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var slides = comHelper.Register(() => presentation.Slides);
                PrepareDocument(presentation, slides, comHelper);

                var targetShape = FindEmptyShape(slides, comHelper) ?? CreateNewSlideWithEmptyShape(presentation, comHelper);

                var targetFrame = comHelper.Register(() => targetShape.TextFrame);
                var textRange   = comHelper.Register(() => targetFrame.TextRange);
                textRange.Text = content;
            }
        }
Exemple #16
0
        /// <summary>
        /// Clears all content in document.
        /// </summary>
        public static void ClearDocumentContent()
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var powerpointApp = GetActivePowerPointApp(comHelper)
                                    ?? throw new InvalidInteropOperationException($"Could not find any {MSPOWERPOINT_INTEROP_APP_NAME} application with active window.");

                var presentation = comHelper.Register(() => powerpointApp.ActivePresentation);
                var slides       = comHelper.Register(() => presentation.Slides);

                RemoveSlides(slides, comHelper, forceRemoveAll: true);
                CreateNewSlideWithEmptyShape(presentation, comHelper);
            }
        }
Exemple #17
0
        /// <summary>
        /// Adds passed string into an active word document.
        /// </summary>
        /// <param name="value">String to add to workbook.</param>
        /// <exception cref="ArgumentNullException">Thrown when the content string is null.</exception>
        /// <exception cref="InvalidInteropOperationException">Thrown when content cannot be added.</exception>
        public static void AddDocumentContent(string value)
        {
            using (var comHelper = new COMObjectsHelper())
            {
                var wordApp = GetActiveWordApp(comHelper)
                              ?? throw new InvalidInteropOperationException($"Could not get interop instance of {MSWORD_INTEROP_APP_NAME} with active window.");

                // Note: This property controls the visibility of alert dialogs
                wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;

                var document = comHelper.Register(() => GetDocument(wordApp))
                               ?? throw new InvalidInteropOperationException($"MS Word active document wasn't found.");

                AddDocumentContent(document, value);
            }
        }
Exemple #18
0
 private static void RemoveShapesWithEmptyTextFrame(PowerPoint.Slides slides, COMObjectsHelper comHelper)
 {
     foreach (PowerPoint.Slide slide in slides)
     {
         comHelper.Register(() => slide);
         var shapes = comHelper.Register(() => slide.Shapes);
         for (int i = shapes.Count; i > 0; --i)
         {
             var shape = comHelper.Register(() => shapes[i]);
             if (shape.HasTextFrame == MsoTriState.msoTrue &&
                 comHelper.Register(() => shape.TextFrame2).HasText == MsoTriState.msoFalse)
             {
                 shape.Delete();
             }
         }
     }
 }
Exemple #19
0
        private static Excel.Worksheet FindActiveSheet(Excel.Windows windows, COMObjectsHelper comHelper, string title)
        {
            Excel.Window matchingWindow = null;

            for (var i = 1; i <= windows.Count; i++)
            {
                var window = comHelper.Register(() => windows[i]);

                if (title.Contains(window.Caption))
                {
                    matchingWindow = window;
                    break;
                }
            }

            return(comHelper.Register(() => matchingWindow?.ActiveSheet));
        }
Exemple #20
0
        private static Word.Document FindDocument(Word.Windows windows, COMObjectsHelper comHelper, string title)
        {
            Word.Window matchingWindow = null;

            for (var i = 1; i <= windows.Count; i++)
            {
                var window = comHelper.Register(() => windows[i]);

                if (title.Contains(window.Caption))
                {
                    matchingWindow = window;
                    break;
                }
            }

            return(comHelper.Register(() => matchingWindow?.Document));
        }
Exemple #21
0
        private static PowerPoint.Shape FindEmptyShape(PowerPoint.Slides slides, COMObjectsHelper comHelper)
        {
            foreach (PowerPoint.Slide slide in slides)
            {
                comHelper.Register(() => slide);
                foreach (PowerPoint.Shape shape in slide.Shapes)
                {
                    comHelper.Register(() => shape);
                    if (shape.HasTextFrame == MsoTriState.msoTrue &&
                        comHelper.Register(() => shape.TextFrame).HasText == MsoTriState.msoFalse)
                    {
                        return(shape);
                    }
                }
            }

            return(null);
        }
Exemple #22
0
        private static PowerPoint.Presentation FindPresentation(PowerPoint.DocumentWindows windows,
                                                                COMObjectsHelper comHelper,
                                                                string title)
        {
            PowerPoint.DocumentWindow matchingWindow = null;

            for (var i = 1; i <= windows.Count; i++)
            {
                var window = comHelper.Register(() => windows[i]);

                if (title.Contains(window.Caption))
                {
                    matchingWindow = window;
                    break;
                }
            }

            return(comHelper.Register(() => matchingWindow?.Presentation));
        }
Exemple #23
0
        /// <summary>
        /// Adds passed string into presentation in the empty shape or in the newly created one.
        /// </summary>
        /// <param name="value">String to add to workbook.</param>
        /// <exception cref="ArgumentNullException">Thrown when the content string is null.</exception>
        /// <exception cref="InvalidInteropOperationException">Thrown when content cannot be added.</exception>
        public static void AddDocumentContent(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("Content should not be null.");
            }

            using (var comHelper = new COMObjectsHelper())
            {
                var powerpointApp = GetActivePowerPointApp(comHelper)
                                    ?? throw new InvalidInteropOperationException($"Could not find any {MSPOWERPOINT_INTEROP_APP_NAME} application with active window.");

                // Note: This property controls the visibility of alert dialogs
                powerpointApp.DisplayAlerts = PowerPoint.PpAlertLevel.ppAlertsNone;

                var presentation = comHelper.Register(() => powerpointApp.ActivePresentation);

                AddDocumnetContent(presentation, value);
            }
        }
Exemple #24
0
        private static void AddDocumnetContent(PowerPoint.Presentation presentation, string value)
        {
            using (var comHelper = new COMObjectsHelper())
            {
                try
                {
                    var slides = comHelper.Register(() => presentation.Slides);
                    PrepareDocument(presentation, slides, comHelper);

                    var targetShape = FindEmptyShape(slides, comHelper) ?? CreateNewSlideWithEmptyShape(presentation, comHelper);

                    var targetFrame = comHelper.Register(() => targetShape.TextFrame);
                    var textRange   = comHelper.Register(() => targetFrame.TextRange);
                    textRange.Text = value;
                }
                catch (COMException)
                {
                    throw new InvalidInteropOperationException("Failed to add content to the presentation, because of COMException.");
                }
            }
        }
Exemple #25
0
        public static void CreateNewDocumentPerformance(string path, IEnumerable <char> content)
        {
            lock (interopProcessLockObject)
            {
                using (var comHelper = new COMObjectsHelper())
                {
                    Excel.Application excelApp = null;
                    try
                    {
                        excelApp = comHelper.Register(() => new Excel.Application());

                        var books = comHelper.Register(() => excelApp.Workbooks);

                        object readOnly = false;

                        Excel.Workbook book = comHelper.Register(() => books.Add());

                        var sheet = comHelper.Register(() => book.ActiveSheet);

                        AddDocumentContentPerformance(sheet, content);

                        object savePath = path.Clone();
                        book.SaveAs(savePath);
                        book.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Document creation failed with error: {ex.Message}. Exception: {ex}.");
                        throw;
                    }
                    finally
                    {
                        // Note: We always should manually quit from application,
                        // because Release() only decreases references counter.
                        excelApp?.Quit();
                    }
                }
            }
        }
Exemple #26
0
        private static void AddDocumentContent(Word.Document document, string value)
        {
            using (var comHelper = new COMObjectsHelper())
            {
                try
                {
                    if (document == null)
                    {
                        throw new InvalidInteropOperationException("Could not update content for the document because document is null.");
                    }

                    var content = comHelper.Register(() => document.Content);

                    if (content == null)
                    {
                        throw new InvalidInteropOperationException($"Could not obtain current content for document {document.Name}.");
                    }

                    var isDocumentEmpty = content.End == 1;

                    if (isDocumentEmpty)
                    {
                        document.Content.Text = value;
                    }
                    else
                    {
                        var paragraphs = comHelper.Register(() => document.Paragraphs);
                        var paragraph  = comHelper.Register(() => paragraphs.Add());
                        var range      = comHelper.Register(() => paragraph.Range);
                        range.InsertAfter(value);
                    }
                }
                catch (COMException ex)
                {
                    throw new InvalidInteropOperationException("Failed to add content to the document, because of COMException.", ex);
                }
            }
        }
Exemple #27
0
        public static void CreateNewDocument(string path, IEnumerable <char> content)
        {
            lock (interopProcessLockObject)
            {
                using (var comHelper = new COMObjectsHelper())
                {
                    PowerPoint.Application ppApp = null;
                    try
                    {
                        Wait.ForResult(() =>
                        {
                            try
                            {
                                ppApp = comHelper.Register(() => new PowerPoint.Application());
                                CreateNewDocument(comHelper, ppApp, path, content);
                            }
                            catch (COMException ex)
                            {
                                Console.WriteLine($"Document creation failed with error: {ex.Message}. Exception: {ex}.");
                            }

                            return(File.Exists(path));
                        });
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Document creation failed with error: {ex.Message}. Exception: {ex}.");
                        throw;
                    }
                    finally
                    {
                        // Note: We always should manually quit from application,
                        // because Release() only decreases references counter.
                        ppApp?.Quit();
                    }
                }
            }
        }
Exemple #28
0
        /// <summary>
        /// Adds passed string into active excel workbook in the first free cell.
        /// </summary>
        /// <param name="value">String to add to workbook.</param>
        /// <exception cref="ArgumentNullException">Thrown when the content string is null.</exception>
        /// <exception cref="InvalidInteropOperationException">Thrown when content cannot be added.</exception>
        public static void AddDocumentContent(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("Content should not be null.");
            }

            // Note: When add content happens in the same time with create new document it breaks excel tests.
            lock (interopProcessLockObject)
            {
                using (var comHelper = new COMObjectsHelper())
                {
                    var application = GetActiveExcelApp(comHelper)
                                      ?? throw new InvalidInteropOperationException("Could not get active excel application object.");

                    // Note: This property controls the visibility of alert dialogs
                    application.DisplayAlerts = false;

                    var activeSheet = comHelper.Register(() => (Excel.Worksheet)application.ActiveSheet);

                    AddDocumentContent(activeSheet, value);
                }
            }
        }
Exemple #29
0
        private static PowerPoint.Shape CreateNewSlideWithEmptyShape(PowerPoint.Presentation presentation, COMObjectsHelper comHelper)
        {
            var slides       = comHelper.Register(() => presentation.Slides);
            var slideMaster  = comHelper.Register(() => presentation.SlideMaster);
            var layouts      = comHelper.Register(() => slideMaster.CustomLayouts);
            var customLayout = layouts[PowerPoint.PpSlideLayout.ppLayoutChartAndText];

            var newSlide = comHelper.Register(() => slides.AddSlide(slides.Count + 1, customLayout));

            return(comHelper.Register(() => newSlide.Shapes[1]));
        }
Exemple #30
0
 private static bool IsSlideEmpty(PowerPoint.Slide slide, COMObjectsHelper comHelper)
 => comHelper.Register(() => slide.Shapes).Count == 0;