Russian Qt Forum
Февраля 28, 2025, 05:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ActiveQt and Word  (Прочитано 21342 раз)
R_a_f_f
Гость
« : Ноября 22, 2007, 17:27 »

Доброго времени суток!!! Возникла проблема при работе с Word в Qt. Заключается в следующем:

Код:
QAxObject* WordApplication=new QAxObject("Word.Application"); // Создаю интерфейс к MSWord
QAxObject* WordDocuments = WordApplication->querySubObject( "Documents()" ); // Получаю интерфейсы к его подобъекту "коллекция открытых документов":
QAxObject* NewDocument = WordDocuments->querySubObject( "Add()" ); // Создаю новый документ
WordApplication->setProperty("Visible", true); // Делаем Word видимым


Как же теперь в этот новый документ что-нибудь программно вставить(Например текст "123456")? Буду очень признателен за любую помощь.
Записан
R_a_f_f
Гость
« Ответ #1 : Ноября 23, 2007, 09:43 »

Уважаемые!!! Неужели никто ничто не может ответить??? Вопрос может показаться глупым, но это не так. Прочитав все сообщения на форуме и испробовав множество предложенных вариантов(Начиная от Visual Basic и заканчивая dumpcpp) к решению данной задачи не пришёл. Грустный
Записан
Tonal
Гость
« Ответ #2 : Ноября 23, 2007, 11:49 »

Для документа получи регион по умолчанию, (Range) и зави его функцию InsertAfter
Это, а так же многое другие интересные вещи можно узнать из встроенной в Ворд справке по VBA.
Так же эта информация присутствует в любом MSDN-е.
Кроме того, в самом Ворде можно включить запись макроса, проделать нузные действия руками и после отключения записи полюбоваться на результат во встроенном редакторе VBA.
Ну и гугль вроде бы некто не отменял. :-)
Записан
R_a_f_f
Гость
« Ответ #3 : Ноября 23, 2007, 14:19 »

В этом то и загвоздочка!!! Не удаётся получить Range документа. Ругается что у Word.Application нет такого метода и предлагает выбрать из списка кандитатов. Точно такая же ситуация и с VisualBasic: Записываю макрос
Код:
Selection.TypeText Text = "123456"
. Пробую этот макрос запрограммировать, но не получается. Ругается что у Word.Application нет такого метода и предлагает выбрать из списка кандитатов. Это же подтверждается(что нет такого метода) при использование dumpdoc word.application. Создаётся файл со списком доступных свойств, мотодов, функций в которм Range отсутствует. Тут пришла мыслишка в голову, может быть это всё из-за того что установлен пакет OFICCE 2007?
Записан
Tonal
Гость
« Ответ #4 : Ноября 24, 2007, 18:36 »

Я же написал для документа а не для приложения.
Внимательнее нужно быть и всё получится! :-)
Записан
R_a_f_f
Гость
« Ответ #5 : Ноября 25, 2007, 18:50 »

Проблема решена!!! На самом деле есть несоответствия в том какие команды использует Visual Basic и какие необходимо использовать при работе в Qt. Доберусь до работы попробую выложить, думаю многим пригодится. Всем спасибо.
Записан
R_a_f_f
Гость
« Ответ #6 : Ноября 28, 2007, 15:59 »

Как и обещал выкладываю код для работы с Microsoft Word:
Код:
QAxObject* WordApplication=new QAxObject("Word.Application"); // Создаю интерфейс к MSWord
QAxObject* WordDocuments = WordApplication->querySubObject( "Documents()" ); // Получаю интерфейсы к его подобъекту "коллекция открытых документов":
WordDocuments->querySubObject( "Add()" ); // Создаю новый документ
// отключение грамматики
QAxObject* Grammatic = WordApplication->querySubObject("Options()");
Grammatic->setProperty("CheckSpellingAsYouType(bool)", false); // отключение грамматики
QAxObject* ActiveDocument = WordApplication->querySubObject("ActiveDocument()");
QAxObject* Range = ActiveDocument->querySubObject("Range()");
// создание таблицы
QAxObject* Tables = ActiveDocument->querySubObject("Tables()");
QAxObject* NewTable = Tables->querySubObject("Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior)", ActiveDocument->dynamicCall("Range()"), 4, 4, 1, 1);
// запись текста в ячейку
QAxObject* Cell = NewTable->querySubObject("Cell(Row, Column)", 1,1);
QAxObject* CellRange = Cell->querySubObject("Range()");
CellRange->dynamicCall("InsertAfter(Text)", "Это ячейка 1:1");

Возникла ещё одна проблема. При добавлении новой таблицы весь текст, который мы отправляли в Word до этого заменяется на эту новую таблицу. Каким же образом при использовании метода Tables.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior) указать правильно Range?
Записан
Axel
Гость
« Ответ #7 : Декабря 06, 2007, 18:25 »

Здравствуйте всем!!!
R_a_f_f большое спасибо за пример...
У меня возникла проблема с поиском и заменой текста... нужна помощь  Непонимающий
Записан
dushabest85
Гость
« Ответ #8 : Августа 08, 2010, 07:35 »

Доброго времени суток, возникла проблема. При добавлении новой таблицы весь текст, который мы отправляли в Word до этого заменяется на эту новую таблицу. Каким же образом при использовании метода Tables.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior) указать правильно Range? Подскажите пожалуйста, ни где не могу найти как это сделать? Пробовал записать макросы в ворде, но там какая то ерунда, в qt так не работает...
Записан
CroCIV
Гость
« Ответ #9 : Сентября 15, 2010, 15:46 »

Доброго времени суток, возникла проблема. При добавлении новой таблицы весь текст, который мы отправляли в Word до этого заменяется на эту новую таблицу. Каким же образом при использовании метода Tables.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior) указать правильно Range? Подскажите пожалуйста, ни где не могу найти как это сделать? Пробовал записать макросы в ворде, но там какая то ерунда, в qt так не работает...

А что утебя передается в Range функции  Tables.Add( ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 20.