Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS Word и С#, Интеграция 
V
    Опции темы
NosfBlazE
Дата 10.2.2012, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.11.2008
Где: Russia

Репутация: нет
Всего: нет



Необходимо интегрировать MS Word в C# приложение. Именно встроить полный Word функционал в выбранную область окна приложения, чтобы пользователь мог с ним работать как обычно.
Например, как на этом рисунке: http://img13.imageshost.ru/img/2012/02/10/...3500337a0d7.jpg
В левой части сплит контейнера находится Word приложение, в правой - остальной пользовательский функционал.
Пока что просто изучаю данную проблему. Хочу понять, возможно ли впринципе реализовать подобное? Если да, то где можно было бы посмотреть информацию на этот счет. В гугле толкового ничего не нашел: там либо просто работают с вордовскими документами, либо приложение запускается в отдельном окне, а это неприемлемо.

Второй вариант - написать плагин для Word, чем я никогда не занимался. Тогда необходимо создать окно, наподобии стандартного окна навигации Word, как показано здесь: http://img13.imageshost.ru/img/2012/02/10/...350031caa24.jpg
Можно ли это сделать на C#? Функционал будет достаточно сложный, поэтому хочется услышать мнение людей, которые этим занимались. Информации подходящей для реализации подобного, к сожалению, не нашел.

PM MAIL ICQ Skype Jabber   Вверх
metis
Дата 20.2.2012, 20:35 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Посмотри вот эту статью  тынц

PM MAIL   Вверх
NosfBlazE
Дата 16.8.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.11.2008
Где: Russia

Репутация: нет
Всего: нет



Совсем забыл про эту тему, а вот сейчас заметил. Нехорошо получилось, а ведь она была интересной.
Приложение давно написано и внедрено в производство. Быть может, кому-то пригодится немного информации по этой теме.

Прежде всего, если нужен весь MS Word функционал, то работать с его либами и ком компонентами нерационально. Гораздо проще и эффективнее написать свой плагин.
В моем случае это был встроенный видео плеер (взял опенс сорс либы VLC и сделал обертку под .net), позволяющий быстро набирать операторам текст наслух, не переключаясь между окнами. Кроме того, все это синхронизуется с сервером(загрузка/отправка текстов и т.п.). Плюс куча фич еще. Не спрашивайте, так хотел заказчик. % )
Итого получилось что-то такое: http://img13.imageshost.ru/img/2012/08/16/...2ca4d936dc9.png
Как видите, функционал достаточно насыщенный, но вполне реализуемый.

Итак, для создания плагина нужен MS Word (не триал версия, а полная купленная.. ну или что там у вас?) и полная версия MS Visual Studio (в Express просто-напросто не будет работать соответствующий тип проекта, вот такие пироги).
Создаем проект Visual C# - Office - 2010 - Word 2012 Add-in (если у вас другая версия офиса, все ок, лично мой плагин заработал и в 2007, единственная проблема была с х64 системами, но это не к этой теме)
А дальше ознакамливаемся вот с этой замечательной статьей: http://mmcrm.ru/?p=1371
Там очень простой пример, из которого становятся понятны базовые вещи.

Далее пару не совсем очевидных вещей (мб только для меня):
  •  глобальную ссылку лучше хранить не на Range, а на  
    Код

    Word.Document wordDocument = Globals.ThisAddIn.Application.ActiveDocument;

    соответственно до текста можно добраться теперь так 
    Код

    wordDocument.Content.Text

    иначе GC убивает объект (вот только на одной машине это происходило, но... !! времени разбираться особо не было)
  •  обавление текста по курсору
    Код

     private void pasteText(string text)
            {            
                Word.Application wdapp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
                
                object objSelection = wdapp.GetType().InvokeMember("Selection", BindingFlags.GetProperty, null, wdapp, null);

                objSelection.GetType().InvokeMember("TypeText", BindingFlags.InvokeMethod, null, objSelection, new object[] { text });

                wdapp = null;
            }

    ничего лучше я не придумал
  •  никакие копирования плодов ваших трудов в папку аддонов у офиса делать не надо. После компиляции студия автоматически устанавливает ваш плагин в системе, для переноса на другие пк лучше всего студией опубликовать проект, создав инсталлятор. Который, кстати, сказать, может и не работать. %) Поэтому либо создавайте инсталлятор др средствами, либо руками ставим в систему помимо фрейморка (если нет его) еще Visual Studio 2010 Tools for Office Runtime, а затем запускаем из опубликованной папки с плагином файл *.vsto. Произойдет установка и ворд будет ссылаться именно на эту вашу директорию, поэтому не надо ее удалять/перемещать и т.п.
Было что-то еще, но не помню уже. )

Исходники предоставить, к сожалению, не могу, но если будут вопросы по реализации, обращайтесь в личку.

Это сообщение отредактировал(а) NosfBlazE - 16.8.2012, 11:08
PM MAIL ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.