Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как прочитать текст в Worde с помощью Coded UI?


(Nezaam) #1

Здравствуйте! Как я могу прочитать текст открытый в ворде с помощью Coded UI и сравнить с заданным?Используя при это объект страницы в UIMape. Заранее спасибо.


(Дмитрий Жарий) #2
Самый простой и надежный способ получить текст из Ворда или doc файла – это использовать COM/ActiveX API.
Тут есть два пути. 
Первый – через ранее связывание. В таком случае, вы добавляете COM объект ворда как референс, и вижуалстудия делает для него обвертку. Это хорошо тем, что у вас появится подсказка по методам при наборе кода. Это плохо тем, что такой механизм может быть не совместим со всеми версиями Ворда. 
 
Вот пример раннего связывания:
http://mantascode.com/c-how-to-parse-the-text-content-from-microsoft-word-document/
+ Не забудьте подключить Word’овский COM компонент как референс в проект. 
 
Позднее связывание не требует подключения дополнительных библиотек и совместимо со всеми версиями ворда. Но, выполняется динамически, и об ошибке (не существующем методе) вы узнаете только во время выполнения. 
Вот пример позднего связывания.
Этот код берет текст из текущего открытого процесса ворда и печатает его в консоль. 
 
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic word = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
 
            for (int i = 0; i < word.ActiveDocument.Paragraphs.Count; i++)
            {
                Console.WriteLine(word.ActiveDocument.Paragraphs[i + 1].Range.Text.ToString());
            }
        }
    }
}
 

 


(Nezaam) #3

dzhariy, спасибо за помощь. Только Ваш код не скомпилился, я сделал вот так:

using System;
using Word = Microsoft.Interop.Office.Word
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var word = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
            Word.Application wordApp = (Word.Application)word;
 
            for (int i = 0; i < wordApp.ActiveDocument.Paragraphs.Count; i++)
            {
                Console.WriteLine(wordApp.ActiveDocument.Paragraphs[i + 1].Range.Text.ToString());
            }
        }
    }
}