1

Тема: Бесплатная среда разработки для работы с объектами Word

Добрый день, уважаемые коллеги!
Хотел бы попрактиковаться в программировании Word на языке высокого уровня (C, C++, C#, Delphi, Java) (что-то наподобие этого (внешняя ссылка) или этого (внешняя ссылка)).
Посоветуйте, пожалуйста, бесплатную среду разработки, которая подойдет для этого.
Как я понимаю, такая среда должна иметь специальные библиотеки для работы с Word.
Желательно было бы иметь возможность обращаться хотя бы к основным объектам Word.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Бесплатная среда разработки для работы с объектами Word

Для C# это Visual Studio. Последняя версия Visual Studio 2013 Community совершенно бесплатна
Для Java можно использовать Eclipse.
Сама среда не имеет каких-то отдельных библиотек для работы с Word. Работа осуществляется через COM-интерфейс. К проекту нужно добавить ссылки на требуемые библиотеки и практически все объекты Word будут доступны.
Тут нужно ставить вопрос о степени владения тем или иным языком программирования, а не о среде разработки.
Пожалуй, чтобы облегчить переход, можно попробовать VB.Net, разработку на котором можно вести в Visual Studio. Синтаксис очень похож на VBA. Но на этом сходство заканчивается. Парадигма ООП требует определённых интеллектуальных усилий.
Я сам переходил с VBA на VB.Net, но сейчас ушёл в C#, т.к. он более лаконичен и гибок.
Хочу отметить, что в самой Visual Studio есть набор инструментов VSTO (Visual Studio Tools for Office developement) для создания надстроек и дополнительных подключаемых библиотек. В том числе с полной поддержкой ленточного интерфейса.
Если нужны подробности — спрашивайте.

Лучше день потерять — потом за пять минут долететь!

3

Re: Бесплатная среда разработки для работы с объектами Word

Добрый день, Александр!

Большое спасибо за ответ.
Я уже установил на компьютер Visual Studio 2010 Express.
Не знаю, есть ли VSTO в этой версии? Как это можно проверить?
VSTO имеется отдельно - внешняя ссылка.
Не знаю, можно ли установить этот пакет в Visual Studio 2010 Express?

А Visual Studio 2013 Community и правда бесплатна? Не Trial-версия?
Включает ли она в себя VSTO?
Если устанавливать Visual Studio 2013 Community, то  Visual Studio 2010 Express лучше снести или можно установить версию 2013 поверх?

По поводу языка, пока собираюсь остановиться на С++, так как у меня есть неплохое русскоязычное пособие по работе с Word на основе C++.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

А Visual Studio 2013 Community и правда бесплатна? Не Trial-версия?
Включает ли она в себя VSTO?
Если устанавливать Visual Studio 2013 Community, то  Visual Studio 2010 Express лучше снести или можно установить версию 2013 поверх?

Она абсолютна бесплатна даже для небольших коммерческих организаций. Вот, кстати, небольшое пояснение.
Она включит в себя всё, что вы укажете при установке. Сносить 2010 не обязательно, но две версии, поверьте, вам ни к чему.
Порог вхождения в C++ очень высок, я пару раз пытался, но меня оттолкнула чрезмерная запутанность взаимосвязей между элементами проекта. Но желаю удачи.

Лучше день потерять — потом за пять минут долететь!

5

Re: Бесплатная среда разработки для работы с объектами Word

Да, обратите внимание, на каком варианте C++ у вас пособие. Возможно, это не Visual C++, который поддерживается Visual Studio, а Borland C++ или ещё что-нибудь.

Лучше день потерять — потом за пять минут долететь!

6

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Да, обратите внимание, на каком варианте C++ у вас пособие. Возможно, это не Visual C++, который поддерживается Visual Studio, а Borland C++ или ещё что-нибудь.

Пособие, действительно, оказалось по С++ Builder. Это существенно?
Если да, то какой учебный материал по работе с Word Вы бы посоветовали для языков, которые поддерживаются Visual Studio?
Желательно на русском, но можно и на английском, из того, что есть в открытом доступе (и не очень длинное smile )..

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

7

Re: Бесплатная среда разработки для работы с объектами Word

Работа с Word не представляет сложностей, если вы знаете объектную модель (а вы, как мне кажется, знаете) и владеете языком программирования.
С учебниками не помогу: я постигал методом тыка и гугления.
Более конкретные вопросы — пожалуйста, отвечу.

Лучше день потерять — потом за пять минут долететь!

8

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Работа с Word не представляет сложностей, если вы знаете объектную модель (а вы, как мне кажется, знаете) и владеете языком программирования.
С учебниками не помогу: я постигал методом тыка и гугления.
Более конкретные вопросы — пожалуйста, отвечу.

Большое спасибо!
Попробую разобраться. Хуже оно не будет. smile

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

9

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Добрый день, уважаемые коллеги!
Хотел бы попрактиковаться в программировании Word на языке высокого уровня (C, C++, C#, Delphi, Java)

"Докатились" до автоматизации на языках - здорово smile Как раз недавно тоже исследовал Си шарп, до этого только на Delphi. Даже хотел написать брошюрку, но времени не хватило (.

Опыт, безусловно, поможет. Начать вот трудно )

Сейчас меня интересует автоматизация на мобильном smile.

10

Re: Бесплатная среда разработки для работы с объектами Word

Установил у себя на компьютере Visual Studio 2013 Community. На установку потребовалось полночи и 11Гб на диске C. sad
Но все прекрасно работает! smile
Подскажите, пожалуйста, как я могу проверить, что установился VSTO?
Где-то в программе это отображается?
Или какую простую программу можно запустить на Си Шарп для проверки?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

11

Re: Бесплатная среда разработки для работы с объектами Word

Благодарю, разобрался с помощью статьи внешняя ссылка

Нужно в новом проекте подключить библиотеку объектов Word. В моем случае это:
Project - Add Reference - Microsoft Word 14.0 Object Library

Текст первой программы может быть следующий:

using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using word = Microsoft.Office.Interop.Word;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            word.Application word = new word.Application();
            word.Visible = true;
            word.Documents.Add();
        }
    }
}

Данная программа открывает новый экземпляр Word!

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

12

Re: Бесплатная среда разработки для работы с объектами Word

Удобнее создавать не консольное, а оконное приложение. При создании нового проекта выберите
вид Windows Forms Application. Появится форма, на нее кидаете кнопку smile Щелкаете кнопку, и пишите тот же код.

13

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

как я могу проверить, что установился VSTO?

Во-первых, он будет виден в установленных программах
внешняя ссылка
Во-вторых, будут доступны соответствующие шаблоны при создании проекта
внешняя ссылка

Лучше день потерять — потом за пять минут долететь!

14

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:
Alex_Gur пишет:

как я могу проверить, что установился VSTO?

Во-первых, он будет виден в установленных программах
внешняя ссылка
Во-вторых, будут доступны соответствующие шаблоны при создании проекта
внешняя ссылка

Алекс, у меня при загрузке нового проекта почему-то нет раздела Office/SharePoint, как на Вашем рисунке, и мне приходится каждый раз подгружать библиотеку Word к создаваемому проекту. Посоветуйте, пожалуйста, как установить библиотеку Word в программе по умолчанию.

Post's attachments

No Office.JPG 53.49 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

15

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Алекс, у меня при загрузке нового проекта почему-то нет раздела Office/SharePoint, как на Вашем рисунке, и мне приходится каждый раз подгружать библиотеку Word к создаваемому проекту

Вы путаете разные типы проектов. Один — это обычное приложение, которое может работать с объектами офисных приложений. Другой — это надстройка для офисных приложений. Результатом такого проекта будет библиотека dll.
Я так понял, вы хотите, чтобы обычное приложение работало с Word. Для создания такого приложения нужно выбрать соответствующий тип проекта, присоединить к нему нужные библиотеки и прописать директивы using в начале файлов. Согласен, делать это утомительно, каждый раз. Но можно сохранить шаблон проекта со всеми требуемыми вам стартовыми условиями и создавать новые проекты на его основе. Почти как шаблон документа.
Я сделал небольшое видео, демонстрирующее процесс создания шаблона: YouTube

Лучше день потерять — потом за пять минут долететь!

16

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:
Alex_Gur пишет:

Алекс, у меня при загрузке нового проекта почему-то нет раздела Office/SharePoint, как на Вашем рисунке, и мне приходится каждый раз подгружать библиотеку Word к создаваемому проекту

Вы путаете разные типы проектов. Один — это обычное приложение, которое может работать с объектами офисных приложений. Другой — это надстройка для офисных приложений. Результатом такого проекта будет библиотека dll.
Я так понял, вы хотите, чтобы обычное приложение работало с Word. Для создания такого приложения нужно выбрать соответствующий тип проекта, присоединить к нему нужные библиотеки и прописать директивы using в начале файлов. Согласен, делать это утомительно, каждый раз. Но можно сохранить шаблон проекта со всеми требуемыми вам стартовыми условиями и создавать новые проекты на его основе. Почти как шаблон документа.
Я сделал небольшое видео, демонстрирующее процесс создания шаблона: YouTube


Добрый день, Александр!
Большое спасибо за подробную инструкцию. Я все реализовал, и теперь работать с приложениями Word стало намного легче.
Идеально было бы еще сделать шаблон на C#, который позволяет работать с уже открытым документом Word, а не с новым документом, как это делается обычно.
Это мог бы быть активный документ в программе Word, последний открытый документ или единственный открытый в Word документ, если иначе не получится.
Тогда можно было бы применять VSTO C# аналогично VBA.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

17

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:
viter.alex пишет:
Alex_Gur пишет:

Алекс, у меня при загрузке нового проекта почему-то нет раздела Office/SharePoint, как на Вашем рисунке, и мне приходится каждый раз подгружать библиотеку Word к создаваемому проекту

Вы путаете разные типы проектов. Один — это обычное приложение, которое может работать с объектами офисных приложений. Другой — это надстройка для офисных приложений. Результатом такого проекта будет библиотека dll.
Я так понял, вы хотите, чтобы обычное приложение работало с Word. Для создания такого приложения нужно выбрать соответствующий тип проекта, присоединить к нему нужные библиотеки и прописать директивы using в начале файлов. Согласен, делать это утомительно, каждый раз. Но можно сохранить шаблон проекта со всеми требуемыми вам стартовыми условиями и создавать новые проекты на его основе. Почти как шаблон документа.
Я сделал небольшое видео, демонстрирующее процесс создания шаблона: YouTube


Добрый день, Александр!
Большое спасибо за подробную инструкцию. Я все реализовал, и теперь работать с приложениями Word стало намного легче.
Идеально было бы еще сделать шаблон на C#, который позволяет работать с уже открытым документом Word, а не с новым документом, как это делается обычно.
Это мог бы быть активный документ в программе Word, последний открытый документ или единственный открытый в Word документ, если иначе не получится.
Тогда можно было бы применять VSTO C# аналогично VBA.

Если работать с открытым документом нельзя, то, как вариант, можно было бы сделать шаблон на открытие файла Word со стандартным диалоговым окном выбора файла. Тогда дальше можно было бы работать с этим документом.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

18

Re: Бесплатная среда разработки для работы с объектами Word

В интернете нашел такую программу:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
 
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "All files (*.*)|*.*|Document Word (*.docx)|*.docx|Document Word 97-2003 (*.doc)|*.doc";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
 
            if (openFileDialog1.ShowDialog() == null)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
    }
}

Окно открытия файла открывается, но программа Word - нет!
Вероятно, еще требуется обработчик в том месте, где дана строчка:
// Insert code to read the stream here.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

19

Re: Бесплатная среда разработки для работы с объектами Word

Бесплатная среда разработки для работы с объектами Word

20

Re: Бесплатная среда разработки для работы с объектами Word

Пример открытия документа ворд с поучением текста второго абзаца. Документ лежит там же, где и exe -

Ваша программа\bin\Debug

21

Re: Бесплатная среда разработки для работы с объектами Word

Благодарю!
А у меня получилось так:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.IO;
using Word = Microsoft.Office.Interop.Word;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
       }

        void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "All files (*.*)|*.*|Document Word (*.docx)|*.docx|Document Word 97-2003 (*.doc)|*.doc";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (openFileDialog.FilterIndex == 1)//если формат документа Word 
                {
                    Word.Application app = new Microsoft.Office.Interop.Word.Application();//процесс Ворда
                    Object docxFileName = openFileDialog.FileName;//имя файла
                    Object missing = Type.Missing;
                    //открыли документ
                    app.Visible = true;
                    app.Documents.Open(ref docxFileName, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing);

                    Word.Find find = app.Selection.Find;
                    find.Text = "а";
                    find.Replacement.Text = "б";
                    Object wrap = Word.WdFindWrap.wdFindContinue;
                    Object replace = Word.WdReplace.wdReplaceAll;
                    find.Execute(FindText: Type.Missing,
                        MatchCase: false,
                        MatchWholeWord: false,
                        MatchWildcards: false,
                        MatchSoundsLike: missing,
                        MatchAllWordForms: false,
                        Forward: true,
                        Wrap: wrap,
                        Format: false,
                        ReplaceWith: missing, Replace: replace);


                }
            }
        }
    }
}

Загружается выбранный файл Word, и в файле производится замена букв "а" на буквы "б".
У меня все работает хорошо!
Проект на C# и тестовый файл Word прилагаю.

Теперь можно более или менее спокойно сопоставлять VSTO и VBA. smile

Post's attachments

Word_WindowForms_Templ 03.zip 205.98 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

22

Re: Бесплатная среда разработки для работы с объектами Word

alexan0308, реализовал Ваше решение (см. приложение - проект и тестовый файл).
Работает прекрасно! Интересно, будет ли работать этот проект у Вас?
Мне кажется, на таких несложных задачах очень хорошо учиться.

Аналог макроса в VBA может быть следующим:

Dim Range As Range
Dim sssr As String
Set Range = ActiveDocument.Paragraphs(2).Range
sssr = Range.Text
MsgBox ("Текст второго абзаца: " + sssr)
Post's attachments

Word_WindowForms_Templ 04.zip 204.6 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

23

Re: Бесплатная среда разработки для работы с объектами Word

Дык будет наверно... да, еще можно было сократить строку

Microsoft.Office.Interop.Word._Document doc;
Word._Application app;

на

Word._Document doc;
Word._Application app;

24

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Благодарю!
А у меня получилось так:

Могу добавить, что совершенно необязательно указывать для отсутствующих параметров Type.Missing. Видимо, код, который в нашли, писался для версий C# 3.0 или ниже. А сейчас на подходе уже седьмая. Начиная с 4-й версии C#, который входит в VS2010, можно не указывать параметры по умолчанию. Т.е открыть документ можно гораздо короче:

app.Documents.Open(docxFileName);

И даже ключевое слово ref не обязательно, т.к. строка всегда передаётся по ссылке

И ещё мне непонятно, откуда взялась привычка обращаться  к элементам Word через нижнее подчёркивание? Т.е. писать

Word._Application

вместо более приятного

Word.Application

Это никак не влияет на работоспособность кода, но странно.

По поводу передачи на другой компьютер. Для работы вашей программы на другом компьютере должна быть установлена та же версия Framework, под которую разработано ваше приложение. Версию можно узнать и изменить либо при создании проекта, либо в его свойствах.
Так же необходима та версия офиса, библиотеку которой вы присоединили к проекту. Т.е. если к проекту вы присоединили библиотеку 14.0, то на 2007, а тем более на 2003 программа работать не будет.

Лучше день потерять — потом за пять минут долететь!

25

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

И ещё мне непонятно, откуда взялась привычка обращаться  к элементам Word через нижнее подчёркивание? Т.е. писать

Word._Application

вместо более приятного

Word.Application

Это никак не влияет на работоспособность кода, но странно.

спс ) просто у кого-то скопировал, так и пошло )))

26

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

По поводу передачи на другой компьютер. Для работы вашей программы на другом компьютере должна быть установлена та же версия Framework, под которую разработано ваше приложение. Версию можно узнать и изменить либо при создании проекта, либо в его свойствах.
Так же необходима та версия офиса, библиотеку которой вы присоединили к проекту. Т.е. если к проекту вы присоединили библиотеку 14.0, то на 2007, а тем более на 2003 программа работать не будет.

Большое спасибо! Теперь мне стало понятно, почему я могу отладить программу на одном компьютере, а на другом - она не идет и требует некотоых изменений.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

27

Re: Бесплатная среда разработки для работы с объектами Word

alexan0308 пишет:

Пример открытия документа ворд с поучением текста второго абзаца. Документ лежит там же, где и exe -

Ваша программа\bin\Debug

Уважаемый alexan0308!
Я был бы очень благодарен Вам, если бы Вы выложили здесь еще несколько подобных несложных примеров использования отдельных объектов VSTO для работы с документами Word.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

28

Re: Бесплатная среда разработки для работы с объектами Word

Чтобы не зависеть от версии подключённой библиотеки, их можно вообще не подключать. (Мне кажется, сейчас уже можно об этом сказать). Подключение библиотеки на этапе проектирования, называется ранним связыванием. Если же мы не знаем, какая версия библиотеки будет доступна, то пользуются поздним связыванием.
В C# это решается с помощью типа dynamic.
Ниже привожу пример консольного приложения, которое получает уже запущенный экземпляр Word, а если такого нет, то создаёт новое. Далее добавляет новый документ и печатает в нём слово "Привет". При выходе из Word прекращается и выполнение программы.

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1 {
   class Program {
      static void Main(string[] args) {
         //Переменная для приложения
         dynamic wdApp;
         try {
            //Пытаемся получить запущенный экземпляр
            wdApp = Marshal.GetActiveObject("Word.Application");
         }
         catch (COMException) {
            //если не получили, то создаём новый
            wdApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
         }
         wdApp.Visible = true;//Показываем приложение
         wdApp.Documents.Add();//Добавляем документ
         wdApp.ActiveDocument.Range.Text = "Привет";//Печатаем в документ слово "Привет"
         while (wdApp.Visible) {
            //Продолжаем выполнение программы, пока окно видимо
            //хотя можно и закрыть. 
         }
      }
   }
}
Лучше день потерять — потом за пять минут долететь!

29

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Чтобы не зависеть от версии подключённой библиотеки, их можно вообще не подключать. (Мне кажется, сейчас уже можно об этом сказать). Подключение библиотеки на этапе проектирования, называется ранним связыванием. Если же мы не знаем, какая версия библиотеки будет доступна, то пользуются поздним связыванием.
В C# это решается с помощью типа dynamic.
Ниже привожу пример консольного приложения, которое получает уже запущенный экземпляр Word, а если такого нет, то создаёт новое. Далее добавляет новый документ и печатает в нём слово "Привет". При выходе из Word прекращается и выполнение программы.

Работает прекрасно, но я не совсем понял, что здесь происходит. Это объект Marshal производит позднее связывание?

И, кажется, уже недалеко до работы с открытым документом?
Но в Вашей программе после

wdApp.Visible = true;//Показываем приложение

следующий код:

wdApp.ActiveDocument.Range Range;

программа у меня не принимает. Пишет:

The type or namespace name 'wdApp' could not be found

Можно было бы, все же, вызвать, каким-то образом, активный документ?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

30

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Это объект Marshal производит позднее связывание?

Позднее связывание — это термин, означающий, что определение типа переменной выполняется не на этапе компиляции, а при выполнении кода.
Marshall — это класс, содержащий инструменты для работы с неуправляемой памятью, кодом, типами и т.п. Углубляться сейчас в него не стоит. Нужно лишь запомнить, что есть метод GetTypeFromProgId, который позволяет получить экземпляр запущенного приложения по названию класса.

Alex_Gur пишет:

следующий код:

wdApp.ActiveDocument.Range Range;

программа у меня не принимает. Пишет:

The type or namespace name 'wdApp' could not be found

Можно было бы, все же, вызвать, каким-то образом, активный документ?

Не совсем понятно, что вы пытаетесь этой строкой сделать. Объявить переменную типа Range? Поскольку мы не ссылаемся на библиотеку Word, то этот фокус не пройдёт. Все вордовские типы нам не доступны, поэтому их нужно объявлять как dynamic.
См. пример (для краткости даю только метод Main):

static void Main(string[] args) {
   //Переменная для приложения
   dynamic wdApp;
   try {
      //Пытаемся получить запущенный экземпляр
      wdApp = Marshal.GetActiveObject("Word.Application");
   }
   catch (COMException) {
      //если не получили, то создаём новый
      wdApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
   }
   wdApp.Visible = true;//Показываем приложение
   //Переменная, которая будет содержать диапазон из активного документа
   dynamic range = wdApp.ActiveDocument.Range;
   //Печатаем в консоль текст активного документа
   Console.WriteLine(range.Text);
   while (wdApp.Visible) {
      //Продолжаем выполнение программы, пока окно видимо
      //хотя можно и закрыть. 
   }
}

После строки

wdApp.Visible = true;//Показываем приложение

объявляется переменная динамического типа (т.е. её тип будет определён во время выполнения программы) и в эту переменную записывается диапазон активного документа. Затем текст из этого диапазона печатается в консоль.

Мне кажется, стоит завести отдельную ветку для разбора более узких аспектов работы с Word посредством других языков.

Лучше день потерять — потом за пять минут долететь!

31

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Мне кажется, стоит завести отдельную ветку для разбора более узких аспектов работы с Word посредством других языков.

Поддерживаю. Предложение очень хорошее. Нужно попросить Админа создать такую ветку.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

32

Re: Бесплатная среда разработки для работы с объектами Word

Еще раз огромное спасибо, viter.alex!
Но для простоты хотелось бы вернуться к "обычному" раннему связыванию и к попытке работы с активным приложением.

Стандартное выражение:

Word.Application app = new Word.Application();

как я понимаю, открывает новый экземпляр Word.
А если мы хотим работать с активным документом, то, кажется, создавать новый экземпляр Word нам не надо.
Все попытки обойтись без слова new не срабатывают:

Word.Application app = Word.Application();

или

Word.Application app;

- все это программа не понимает.
В первом случае выходит ошибка " 'Microsoft.Office.Interop.Word.Application' is a 'type', which is not valid in the given context ", а во втором - " Use of unassigned local variable 'app' " (что относится к следующему выражению: app.Visible = true;)
Хотя в примере внешняя ссылка рекомендуется использовать аналогичное выражение:

Word.Application wrdApp;

Можно ли обратиться к уже открытому экземпляру Word при раннем связывании?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

33

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Можно ли обратиться к уже открытому экземпляру Word при раннем связывании?

Конечно, точно так же через Marshal, только приводя к нужному типу:

static void Main(string[] args){
   Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
   wdApp.ActiveDocument.Range().InsertAfter("Печать текста в активном документе");
}
Лучше день потерять — потом за пять минут долететь!

34

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:
Alex_Gur пишет:

Можно ли обратиться к уже открытому экземпляру Word при раннем связывании?

Конечно, точно так же через Marshal, только приводя к нужному типу:

static void Main(string[] args){
   Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
   wdApp.ActiveDocument.Range().InsertAfter("Печать текста в активном документе");
}

Большое спасибо, Алекс!
Немножко преобразовал Ваш код. Все прекрасно работает.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.IO;
using Word = Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        void button1_Click(object sender, EventArgs e)
        {

            Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application"); //процесс Ворда

            //Обращаемся к активному документу
            wdApp.Visible = true;

            Word.Document docWord = wdApp.ActiveDocument;
            Word.Range range = wdApp.ActiveDocument.Range(); 
            string strTxt;

            range.InsertAfter("Печать текста в активном документе");

            // фрагмент документа Word – абзацы
            range = docWord.Paragraphs[2].Range;

            strTxt = range.Text;
            MessageBox.Show("Текст второго абзаца: " + strTxt);

        }
    }
}

Еще возникло два вопроса:
- А без Marshal обратиться к активному документу нельзя?
- Также непонятно, что означает второе (Word.Application) (в круглых скобках) в выражении

 Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");

В некоторых примерах в интернете я встречал подобные выражения в скобках, но нигде не поянялось, зачем они нужны.
Например:

((Microsoft.Office.Interop.Word.Application)app).Quit(ref mis, ref mis, ref mis);
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

35

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Еще возникло два вопроса:
- А без Marshal обратиться к активному документу нельзя?
- Также непонятно, что означает второе (Word.Application) (в круглых скобках) в выражении

 Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");

Чем же вам Marshal не угодил? Это самый простой способ получить экземпляр запущенного приложения.
Выражение в круглых скобках нужно для приведения к желаемому типу. Дело в том, что метод GetActiveObject возвращает объект типа object. И чтобы преобразовать его в нужный нам тип Word.Application, этот нужный тип ставится впереди в скобках. Это называется кастингом (cast).
Такое преобразование работает не всегда, но в данном случае возможно, потому что мы точно знаем, что хотим получить

Лучше день потерять — потом за пять минут долететь!

36

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:
Alex_Gur пишет:

Еще возникло два вопроса:
- А без Marshal обратиться к активному документу нельзя?
- Также непонятно, что означает второе (Word.Application) (в круглых скобках) в выражении

 Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");

Чем же вам Marshal не угодил? Это самый простой способ получить экземпляр запущенного приложения.
Выражение в круглых скобках нужно для приведения к желаемому типу. Дело в том, что метод GetActiveObject возвращает объект типа object. И чтобы преобразовать его в нужный нам тип Word.Application, этот нужный тип ставится впереди в скобках. Это называется кастингом (cast).
Такое преобразование работает не всегда, но в данном случае возможно, потому что мы точно знаем, что хотим получить


Огромное спасибо, Алекс! Теперь со скобками стало более понятно.
А что означают двойные скобки в выражении ? :

((Microsoft.Office.Interop.Word.Application)app).Quit(ref mis, ref mis, ref mis);

(Microsoft.Office.Interop.Word.Application) - теперь понятно, это приведение к типу Application. А зачем еще одни скобки с app ((Microsoft.Office.Interop.Word.Application)app) ?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

37

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

А зачем еще одни скобки с app ((Microsoft.Office.Interop.Word.Application)app) ?

Затем, чтобы сразу использовать результат приведения и вызвать метод Quit

Лучше день потерять — потом за пять минут долететь!

38

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Последняя версия Visual Studio 2013 Community совершенно бесплатна

Ыыы... Поставил Community, но в ней проекты Word не поддерживаются. А в полной версии всё есть. Подскажите, может какую надстройку надо скачать?

39

Re: Бесплатная среда разработки для работы с объектами Word

Настаев, честно говоря, я не помню как я их себе устанавливал. То ли вместе со студией, то ли отдельно. Но если нет со студией, то можно установить отдельно, скачав отсюда
Я сам использую Community и все VSTO у меня доступны

Лучше день потерять — потом за пять минут долететь!

40

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:
Alex_Gur пишет:

А зачем еще одни скобки с app ((Microsoft.Office.Interop.Word.Application)app) ?

Затем, чтобы сразу использовать результат приведения и вызвать метод Quit

Спасибо большое. Принципиальный подход понял, но тонкости будем уже осваивать потом.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

41

Re: Бесплатная среда разработки для работы с объектами Word

Настаев пишет:
viter.alex пишет:

Последняя версия Visual Studio 2013 Community совершенно бесплатна

Ыыы... Поставил Community, но в ней проекты Word не поддерживаются. А в полной версии всё есть. Подскажите, может какую надстройку надо скачать?

Сергей, подскажите, пожалуйста, о каких проектах Word идет речь?
Недавно установил Visual Studio 2013 Community.
Microsoft Word Object Library есть. Microsoft.Office.Interop.Word тоже есть.
Этого разве недостаточно?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

42

Re: Бесплатная среда разработки для работы с объектами Word

Реализовал следующий пример: внешняя ссылка
Получилось так:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.IO;
using Word = Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        void button1_Click(object sender, EventArgs e)
        {

            Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
            wdApp.Visible = true;

           //Открываем документ с указанным шаблоном
            wdApp.Documents.Add(@"D:\Alex\Templ1.dotx");

            // или:
            //object template = @"D:\Alex\Templ1.dotx";
            //wdApp.Documents.Add(ref template);

        }
    }
}

Алекс, появилось еще два небольших вопроса:

1) Не работает выражение с ключевым словом this, приведенное в упомянутом примере (внешняя ссылка):

this.Application.Documents.Add(@"D:\Alex\Templ1.dotx");

Выдается сообщение об ошибке:
'WindowsFormsApplication1.Form1' does not contain a definition for 'Application' and no extension method 'Application' accepting a first argument of type 'WindowsFormsApplication1.Form1' could be found (are you missing a using directive or an assembly reference?)

С чем это может быть связано?

2) Также не совсем понял назначение значка @  в выражении this.Application.Documents.Add(@"D:\Alex\Templ1.dotx").

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

43

Re: Бесплатная среда разработки для работы с объектами Word

this тут не нужен. Должно быть wdApp, ведь мы обращаемся к документам. Ключевое слово this используется для обращения к экземпляру класса, в котором код находится. В данном случае оно абсолютно лишнее, вероятно, опечатка.
Знак @ нужен для того, чтобы все спецсимволы в пути к файлу воспринимались как есть. Если его убрать, то все обратные косые черты (\) придётся дублировать. Т.е. записи

@"D:\Alex\Templ1.dotx"
"D:\\Alex\\Templ1.dotx"

эквивалентны

Лучше день потерять — потом за пять минут долететь!

44

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur, я посмотрел, что там по ссылке. Приведённый пример иллюстрирует работу из надстройки, ведь там написано:

To use this code example, run it from the ThisDocument or ThisAddIn class in your project.

И тогда слово this становится вполне себе обоснованным. Такие проекты создаются иначе (см. скриншот)
Ещё раз обращу внимание, что есть разница между проектами VSTO и обычными программами, которые лишь используют библиотеки Interop. VSTO позволяет создавать надстройки для работы внутри самого Word (и других офисных приложений), тогда как библиотеки Interop дают возможность из другого приложения взаимодействовать с Word

Лучше день потерять — потом за пять минут долететь!

45

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Alex_Gur, я посмотрел, что там по ссылке. Приведённый пример иллюстрирует работу из надстройки, ведь там написано:

To use this code example, run it from the ThisDocument or ThisAddIn class in your project.

И тогда слово this становится вполне себе обоснованным. Такие проекты создаются иначе (см. скриншот)
Ещё раз обращу внимание, что есть разница между проектами VSTO и обычными программами, которые лишь используют библиотеки Interop. VSTO позволяет создавать надстройки для работы внутри самого Word (и других офисных приложений), тогда как библиотеки Interop дают возможность из другого приложения взаимодействовать с Word

Спасибо.
Интересно, что в моей установке программы VS 2013 нет подраздела шаблонов Office/SharePoint, который имеется на Вашем скришшоте (см. скриншот моей программы в прилагаемом изображении).
Я установил также VSTO по той ссылке, которую Вы выложили, но указанный раздел так и не появился.
Возможно это и есть те проекты Word, о которых писал коллега Настаев?

Post's attachments

CS-Templates.jpg 131.92 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

46

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur, попробуйте поискать среди шаблонов (поле поиска в правом верхнем углу) по слову Word

Лучше день потерять — потом за пять минут долететь!

47

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Alex_Gur, попробуйте поискать среди шаблонов (поле поиска в правом верхнем углу) по слову Word

К сожалению, находятся только те шаблоны, которые я создал сам.

Post's attachments

Search_Word.jpg 133.58 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

48

Re: Бесплатная среда разработки для работы с объектами Word

Во время выполнения примера внешняя ссылка у меня возник вопрос по поводу 3-й части этого примера:

Порядок выполнения надстроек уровня приложения.
Отображение документа в режиме предварительного просмотра путем вызова метода PrintPreview
•    Вызовите метод PrintPreview документа Document для просмотра. Чтобы использовать этот пример кода, выполните его из класса ThisAddIn в проекте.
C#   
this.Application.ActiveDocument.PrintPreview();

Как Вы меня научили, здесь речь идет об уровне приложения. Значит this мы заменяем на wdApp.
Непонятно, зачем нужно выражение wdApp.Application.ActiveDocument?
У меня прекрасно работает и выражение, более мне понятное:

wdApp.ActiveDocument

Почему в этом случае рекомендуется использовать два раза Application?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

49

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Непонятно, зачем нужно выражение wdApp.Application.ActiveDocument?
У меня прекрасно работает и выражение, более мне понятное:

wdApp.ActiveDocument

Почему в этом случае рекомендуется использовать два раза Application?

Вы совершенно правы. Не нужно дважды использовать. Масло масляное получается. Работать будет без ошибок, но красоты коду не прибавит

Лучше день потерять — потом за пять минут долететь!

50

Re: Бесплатная среда разработки для работы с объектами Word

Ещё пример работы с активным документом (делал для другого форума).

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Word;

namespace ConsoleApplication1 {
   class Program {
      static void Main(string[] args) {
         //Получаем ссылку на запущенное приложение
         Application wdApp = (Application)Marshal.GetActiveObject("Word.Application");
         //Вызов метода для добавления нумерации в документ
         InsertPageNumbers(wdApp.ActiveDocument, WdPageNumberAlignment.wdAlignPageNumberLeft);
      }

      static void InsertPageNumbers(Document doc, WdPageNumberAlignment alignment) {
         //Переход на вторую страницу (вернее, в начало третьей)
         Range range = doc.Range().GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, 3);
         //Вставка разрыва раздела в конце второй страницы. 
         doc.Sections.Add(range, WdSectionStart.wdSectionContinuous);
         //Колонтитул второго раздела
         HeaderFooter hf = doc.Sections[doc.Sections.Count].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];
         //Открепление нумерации от колонтитула предыдущего раздела
         hf.LinkToPrevious = false;
         //Не начинать нумерацию с 1
         hf.PageNumbers.RestartNumberingAtSection = false;
         //Добавление нумерации по заданному выравниванию
         hf.PageNumbers.Add(alignment, true);
      }
   }
}

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

using Word = Microsoft.Office.Interop.Word;

. Тем не менее, компилятор сам найдёт типы Application, Document и всё остальное.
Так же хочу обратить внимание на получение элемента из коллекции Sections. Обращение нужно делать через квадратные скобки, а не через круглые, как в бейсике:

doc.Sections[doc.Sections.Count].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];
Лучше день потерять — потом за пять минут долететь!

51

Re: Бесплатная среда разработки для работы с объектами Word

В целях обучения попробую реализовать на C# примеры работы с VSTO, предложенные Microsoft:
- Работа с документами (внешняя ссылка)
- Работа с текстом в документах (внешняя ссылка)
- Работа с таблицами (внешняя ссылка)

Первую часть я уже выполнил. Сейчас перешел ко второй.
Застрял на примере внешняя ссылка
Код этого примера на C# получился следующим:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Word = Microsoft.Office.Interop.Word;

namespace Word_Template_20_11
{
    class Program
    {
        static void Main(string[] args)
        {
            Word.Application wdApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
            wdApp.Visible = true;
            Word.Document wdDoc = wdApp.ActiveDocument;
            Object wdMissing = Type.Missing;

            // Исключение знаков абзаца при создании диапазонов на уровне документа 

            Word.Range firstRange = wdDoc.Paragraphs[1].Range; 
            Word.Range secondRange = wdDoc.Paragraphs[2].Range; 

            string firstString = firstRange.Text; 
            string secondString = secondRange.Text; 

            firstRange.Text = secondString; 
            secondRange.Text = firstString; 

            firstRange.Select(); 
            Console.WriteLine(firstRange.Text); 
            Console.ReadLine();
            secondRange.Select(); 
            Console.WriteLine(secondRange.Text); 
            Console.ReadLine();

            object charUnit = Word.WdUnits.wdCharacter;
            object move = -1;  // move left 1

            firstRange.MoveEnd(ref charUnit, ref move);

            firstRange.Text = "New content for paragraph 1.";
            secondRange.Text = "New content for paragraph 2.";

            firstRange.Select(); 
            Console.WriteLine(firstRange.Text); 
            Console.ReadLine();
            secondRange.Select(); 
            Console.WriteLine(secondRange.Text); 
            Console.ReadLine();

            move = 1;  // move right 1
            firstRange.MoveEnd(ref charUnit, ref move);

            secondRange.Delete(ref wdMissing, ref wdMissing); 

            firstRange.Text = firstString; 

            firstRange.InsertAfter(secondString); 
            firstRange.Select(); 

            //Console.WriteLine(documentName2);
            //Console.ReadLine();
        }
    }
}

Во первых, мне совершенно непонятно, чего они хотят здесь сделать.
А, во-вторых, непонятно, почему после выполнения выражения:

secondRange.Text = firstString; 

значение firstRange.Text становится равным Null (а мне казалось, что оно должно было бы оставаться secondString).

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

52

Re: Бесплатная среда разработки для работы с объектами Word

viter.alex пишет:

Настаев, честно говоря, я не помню как я их себе устанавливал. То ли вместе со студией, то ли отдельно. Но если нет со студией, то можно установить отдельно, скачав отсюда
Я сам использую Community и все VSTO у меня доступны

Установил отдельно дополнение "Приложения для Office. Средства Visual Studio 2013" (внешняя ссылка).
Теперь у меня наконец-то появился раздел Office/SharePoint (см. прилагаемый скриншот)!

Post's attachments

Проекты Word.jpg 134.71 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

53

Re: Бесплатная среда разработки для работы с объектами Word

Alex_Gur пишет:

Во первых, мне совершенно непонятно, чего они хотят здесь сделать.

Демонстрируется манипулирование абзацами. В частности. обмен текста между двумя абзацам и  вставку текста в конец первого абзаца.

Alex_Gur пишет:

А, во-вторых, непонятно, почему после выполнения выражения:

secondRange.Text = firstString; 

значение firstRange.Text становится равным Null (а мне казалось, что оно должно было бы оставаться secondString).

Тут у них ошибка. При переопределении текста первого абзаца оба абзаца пропадают, потому что нарушается порядок символов. Чтобы поменять абзацы местами, сначала нужно менять тот, что ближе к концу документа

Лучше день потерять — потом за пять минут долететь!

54

Re: Бесплатная среда разработки для работы с объектами Word

Скачал в интернете несколько любопытных файлов на C# (см. приложение), касающихся использования VSTO для Word и хотел бы их запустить, но VS пишет, что

This project needs to be migrated

Скорее всего эти файлы относятся к более ранней версии VS.
Каким образом можно произвести их миграцию?

Post's attachments

CS_files.zip 73.76 Кб, 1 скачиваний с 2015-05-15 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

55

Re: Бесплатная среда разработки для работы с объектами Word

Неплохой фильм на английском языке о создании проектов Word (правда, на Visual Basic):
внешняя ссылка

Успешно создал несколько кнопок, как там рекомендуется, и заполнил кодом обработчики нажатий этих кнопок. Одновременно преобразовал из Visual Basic в C#:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using Microsoft.Office.Tools.Word;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Office = Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;

namespace WordDocument_011
{
    public partial class ThisDocument
    {
        private void ThisDocument_Startup(object sender, System.EventArgs e)
        {
            ThisApplication.Caption = "Test the VSTO";
        }

        private void ThisDocument_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region Код, созданный конструктором VSTO

        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        private void InternalStartup()
        {
            this.button4.Click += new System.EventHandler(this.button4_Click);
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.button2.Click += new System.EventHandler(this.button2_Click);
            this.button3.Click += new System.EventHandler(this.button3_Click);
            this.button5.Click += new System.EventHandler(this.button5_Click);
            this.Startup += new System.EventHandler(this.ThisDocument_Startup);
            this.Shutdown += new System.EventHandler(this.ThisDocument_Shutdown);

        }

        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
            Word.Window wnd = ThisApplication.NewWindow();
            ThisApplication.Windows.Arrange(Word.WdArrangeStyle.wdTiled);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("CapsLock State is: " + ThisApplication.CapsLock.ToString());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ThisApplication.Documents.Add();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            switch (ThisApplication.Selection.Type)
            {
                case Word.WdSelectionType.wdSelectionInlineShape:
                    MessageBox.Show("Selection made");
                    break;
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            ThisApplication.Selection.EndKey(Word.WdUnits.wdStory, Word.WdMovementType.wdExtend);
        }
    }
}

В заключение опубликовал результирующий файл:
Build - Publish ...
Опубликованный файл работает корректно.
Правильно я сделал?

Также сохранил шаблон
File - Export Template...

Но после вторичного запуска шаблона появилась ошибка: "Не удается установить настройку..." (см. приложение).
Не подскажете мне, с чем может быть связана эта ошибка и как ее исправить.

Post's attachments

Ошибка1.png
Ошибка1.png 24.73 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

56

Re: Бесплатная среда разработки для работы с объектами Word

Почему-то после публикации и запуска опубликованного файла Word программа Word хочет установить настройку (см. приложение).
Можно ли сделать так, чтобы и сформированный файл работал корректно независимо от Visual Studio, и в Visual Studio можно было бы работать с аналогичным файлом?

Post's attachments

Настройка1.png
Настройка1.png 20.89 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.