Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
1

ActiveX Перейти в начало Word-документа

28.01.2014, 16:43. Показов 3701. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заполняю документ
C++ (Qt)
1
2
3
4
 QAxObject *W = new QAxObject("Word.Application"); // Создаю интерфейс к MSWord
....
  QAxObject *s = W->querySubObject("Selection()");
  s->querySubObject("GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=\"1\"");
Параметр содрал из макроса
Сообщение
Код
QAxBase::dynamicCallHelper: GoTo What:=wdGoToPage,Which:=wdGoToNext,Name:="1": No such property in  [unknown]
        Candidates are:
А как надо???
Вообще, каков принцип перевода макросов в функции ActiveX

Добавлено через 11 минут
Макрос выглядит вот так
Код
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="1"
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2014, 16:43
Ответы с готовыми решениями:

Перейти по ссылке из документа Word
Всем привет. У меня есть вордовский файл. В нём содержатся ссылки на книги и их описание. Мне нужно...

Перейти в конец документа WORD из C#
тов. кто может подсказать как переместить курсор в конец документа ворд при его открытии через...

Как в word-е перейти в начало определенной строки, если положение курсора не известно?
Как в word-е перейти в начало определенной строки, если положение курсора не известно?

Переместиться в начало документа Word
Здравствуйте! Очень нужна помощь, поиск по форумам почему-то не помог. Всего лишь нужно вернуться в...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.01.2014, 17:15 2
Лучший ответ Сообщение было отмечено Байт как решение

Решение

Байт, а вот так:
C++ (Qt)
1
2
3
4
5
6
// ...
    const int wdGoToPage = 1;
    const int wdGoToNext = 2;
    QAxObject *s = W->querySubObject("Selection()");
    s->querySubObject("GoTo(Int, Int, Int)",
                      wdGoToPage, wdGoToNext, 1);
?
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
28.01.2014, 17:54  [ТС] 3
UI, Получилось вот так
C++ (Qt)
1
2
   QAxObject *s = W->querySubObject("Selection()");
    s->querySubObject("GoTo(Int, Int, Int)",  1, 1, 1);
(wdGotoFirst = 1)

Добавлено через 2 минуты
Не знаете ли, где толково можно почитать об этих вещах? Желательно, на русском.
Вижу, что возможности - немерянные. Но тыкаюсь, как слепой щенок...
0
17 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 3
27.07.2017, 11:19 4
Господа, найдена ли какая- нибудь информация, де толково можно почитать об этих вещах? =)
0
6 / 3 / 0
Регистрация: 27.07.2017
Сообщений: 9
27.07.2017, 21:10 5
вот здесь есть пример работы с Microsoft Word из Qt - https://youtu.be/g8EssPugLCg
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.07.2017, 22:49  [ТС] 6
Увы! В видеороликах ничего понять не могу. Культура не моя. К сожалению.
0
17 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 3
28.07.2017, 00:16 7
А почему тема такая не освященная?
Вообще никакого оф. Мануала о_О
Ну помимо создания com объекта, но qt то этого не умеет!
0
6 / 3 / 0
Регистрация: 27.07.2017
Сообщений: 9
28.07.2017, 07:15 8
Байт, что тебе не понятно в ролике? Давай я тебе поясню что смогу.
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
28.07.2017, 09:17  [ТС] 9
Цитата Сообщение от Linka_tp Посмотреть сообщение
Байт, что тебе не понятно в ролике? Давай я тебе поясню что смогу.
Спасибо за предложение!
Меня вообще крючит от этих роликов. Возможно, все неудачные попадались...
К тому же в нашей деревне не слишком хорош интернет. Ролики смотреть довольно мучительно.
И есть 2 типа людей. Одни лучше усваивают лекционный способ подачи материала. Другим эффективнее книжечку почитать. Я принадлежу к ярко выраженному "библиотечному" типу.
Однако, предложение твое и благородно, и заманчиво. При первой возможности попробую все-таки посмотреть...

Добавлено через 10 минут
Вообще-то мне даже удалось сделать пару проектов с управлением Ворда из Qt. И они даже работают! Но все это делалось методом научного тыка и переписывания готовых примеров. А хотелось бы понять суть. Вот макросы Ворда я понимаю немного. И очевидно, что все сделанное макросом, можно сделать и управляя Ворд-документом из Qt. Вопрос в том, как перевести текст макроса в последовательность Qt-вызовов.
Впрочем, обсуждение этого вопроса стоит отложить до просмотра мной ролика...
0
17 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 3
30.07.2017, 21:42 10
Т.к. оф. Документации никакой нет принцип такой:
1. Пишем макрос в офисе
2. Редактируя макрос смотрим какие команды он использует
3. В QT используется только две функции – querySubObject (Запрос объекта - функция используется только тогда, когда нужно вызвать определенный вордовский класс или создать объект этого класс- не знаю как тут правильнее интерперитировать) и setProperty (Установить настройки). Чтобы их использовать, необходимо создать указатель на QAxObject.
Например:
C++ (Qt)
1
2
QAxObject *word = new QAxObject("Word.Application", this); // открываем Word
word->setProperty("Visible", true);//  Отображаем на экране
4. Дальше я хочу заменить в тексте одно слово на другое.
Вордовский макрос:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
With Selection.Find 
.Text = "LABLE" 
.Replacement.Text = "Hello" 
.Forward = True 
.Wrap = wdFindContinue 
.Format = False 
.MatchCase = False 
.MatchWholeWord = False 
.MatchWildcards = False 
.MatchSoundsLike = False 
.MatchAllWordForms = False 
End With 
Selection.Find.Execute Replace:=wdReplaceAll 
End Sub
Чудно, теперь можно узнать что означает каждый параметр, нажав клавишу F2, в окошке редактирования макроса. Или забраться https://msdn.microsoft.com/ru-... ecute.aspx тут я искал аргументы функции execute класса FIND.
5. Пишем нечто подобное:
C++ (Qt)
1
2
3
4
5
QAxObject *word = new QAxObject("Word.Application", this);
    word->setProperty("DisplayAlerts", false);
    word->setProperty("Visible", true);
    QAxObject *documents = word->querySubObject("Documents"); //получаем коллекцию документов
    QAxObject *document = documents->querySubObject("Add(D:\\test.doc)"); //добавляем свой документ в коллекцию
Ворд макрос :
Visual Basic
1
Selection.Find
Qt эквивалент:
C++ (Qt)
1
2
3
QAxObject* WordSelection = word ->querySubObject("Selection");
 
     QAxObject* Find = WordSelection->querySubObject("Find");
Ворд макрос:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
.Text = "LABLE" 
.Replacement.Text = "Hello" 
.Forward = True 
.Wrap = wdFindContinue 
.Format = False 
.MatchCase = False 
.MatchWholeWord = False 
.MatchWildcards = False 
.MatchSoundsLike = False 
.MatchAllWordForms = False 
'Это некое заполнение полей функции execute
Selection.Find.Execute Replace:=wdReplaceAll ' А это выполнение этой функции с меткой wdReplaceAll… Replace:=wdReplaceAll ' ' ' 
' это одно из аргументов функции Execute.
Qt эквивалент:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
QList<QVariant> params;
     QString oldString = "LABEL";
     QString newString = "Hello";
     params.operator << (QVariant(oldString));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(true));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(newString));
     params.operator << (QVariant("2"));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
     params.operator << (QVariant(false));
 
     Find->dynamicCall("Execute(const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,"
                       "const QVariant&,const QVariant&,const QVariant&)",
                       params);
0
30.07.2017, 21:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2017, 21:42
Помогаю со студенческими работами здесь

На оборотной стороне документа word в правой части документа, текст съезжает за границу документа
Добрый вечер. Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что...

Как перейти в начало цикла?
Подскажите как сделать так, когда введешь 0 как второе число, опросило продолжение программы(то что...

Заполнение документа Word несколько раз данными из другого документа
есть некий документ Word(test.docx). Нужно создать новый документ(test1.docx), и заполнить его...

Постраничная разбивка документа Word. Сохранение под разными именами.(данные из документа)
ТЗ: Сделать так чтобы данные из Excel перетягивались в Word, При этом файл ворд разбивался на 5...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru