Russian Qt Forum
Ноябрь 15, 2024, 09:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ActiveQt and Word  (Прочитано 21170 раз)
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.103 секунд. Запросов: 20.