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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Word ActiveX  (Прочитано 5388 раз)
CJ1
Гость
« : Июнь 17, 2012, 17:59 »

Скажите, где берутся команды ворда для работы в activex?
Записан
Bepec
Гость
« Ответ #1 : Июнь 17, 2012, 20:25 »

В msdn искать не пробовали?
Записан
CJ1
Гость
« Ответ #2 : Июнь 18, 2012, 07:28 »

Пробовал, как обычно не нашел! Мне нружна работа с таблицами, считывания ячеек
Записан
CJ1
Гость
« Ответ #3 : Июнь 18, 2012, 08:00 »

Короче я нашел кучу свойств. Точнее я просто сделал generateDocument и вобщем там многое, и все работает, но как обращатся к таблици нету!!!!!!!!!!!!!!!
Записан
CJ1
Гость
« Ответ #4 : Июнь 18, 2012, 08:54 »

Вот такое  написал
Код:
          QAxWidget * word_app = new QAxWidget("Word.Application", this);
            if (!word_app)
                return ;


            word_app->setProperty("Visible", true); // Делаю его невидимым
            word_app->setProperty("DisplayAlerts", "0");  // Это мне надо, отключает гуеву ругань на различного рода ошибки, чтоб процесс выполнения программы на ошибках и предупреждениях не прерывался

           QAxObject * word_file = word_app->querySubObject("Documents");
            if (!word_file)
                QMessageBox::information(0,"","Documents не взялся");

            word_file->querySubObject("Open(const QString&)", s);

           QAxObject * word_selection = word_app->querySubObject("Selection");
            if (!word_selection)
                QMessageBox::information(0,"","word_selection не взялся");

            QAxObject * Tables = word_selection->querySubObject("Tables(1)");
            if (!Tables)
                QMessageBox::information(0,"","Tables не взялся");

            Tables->querySubObject("Selection()");


            QAxObject * Range=Tables->querySubObject("Range()");
            if (!Range)
                QMessageBox::information(0,"","Range не взялся");

            QAxObject* Cell = Tables->querySubObject("Cell(Row, Column)", 1,1);

            QAxObject* CellRange = Cell->querySubObject("Range()");
             QMessageBox::about(0,"",Cell->property("Value").toString());

            word_app->dynamicCall("Close (Boolean)", FALSE);
            word_app->dynamicCall("Quit()");

Ошибок не дает, но и значения не возвращает!
« Последнее редактирование: Июнь 18, 2012, 08:56 от CJ1 » Записан
CJ1
Гость
« Ответ #5 : Июнь 18, 2012, 09:59 »

Теперь нашел как брать значения
Код:
            QAxWidget * word_app = new QAxWidget("Word.Application", this);
            if (!word_app)
                return ;


            word_app->setProperty("Visible", true); // Делаю его невидимым
            word_app->setProperty("DisplayAlerts", "0");  // Это мне надо, отключает гуеву ругань на различного рода ошибки, чтоб процесс выполнения программы на ошибках и предупреждениях не прерывался

           QAxObject * word_file = word_app->querySubObject("Documents");
            if (!word_file)
                QMessageBox::information(0,"","Documents не взялся");

            word_file->querySubObject("Open(const QString&)", s);

           QAxObject * word_selection = word_app->querySubObject("Selection");
            if (!word_selection)
                QMessageBox::information(0,"","word_selection не взялся");

            QAxObject * Tables = word_selection->querySubObject("Tables(1)");
            if (!Tables)
                QMessageBox::information(0,"","Tables не взялся");

            Tables->querySubObject("Selection()");



            QMessageBox::about(0,"",Tables->property("Rows").toString());

            QAxObject * Range=Tables->querySubObject("Range()");
            if (!Range)
                QMessageBox::information(0,"","Range не взялся");

            QAxObject* Cell = Tables->querySubObject("Cell(Row, Column)", 1,1);

            QAxObject* CellRange = Cell->querySubObject("Range()");
             QMessageBox::about(0,"",CellRange->property("Text").toString());

            word_app->dynamicCall("Close (Boolean)", FALSE);
            word_app->dynamicCall("Quit()");

           // delete word_app;
          //  delete word_file;

Но не нашел как получать количество строк и столбцов
Записан
CJ1
Гость
« Ответ #6 : Июнь 18, 2012, 14:13 »

Все разобрался
Вот код если кому-то нужен

Код:
            QAxWidget * word_app = new QAxWidget("Word.Application", this);
            if (!word_app)
                return ;


            word_app->setProperty("Visible", false); // Делаю его невидимым
            word_app->setProperty("DisplayAlerts", "0");  // Это мне надо, отключает гуеву ругань на различного рода ошибки, чтоб процесс выполнения программы на ошибках и предупреждениях не прерывался

            //Беру документ
           QAxObject * word_file = word_app->querySubObject("Documents");
            if (!word_file){
                QMessageBox::information(0,"","Documents не взялся");
                return;
            }
           
            // Открываю файл
            word_file->querySubObject("Open(const QString&)", s);

            // Выбераю его
           QAxObject * word_selection = word_app->querySubObject("Selection");
            if (!word_selection){
                QMessageBox::information(0,"","word_selection не взялся");
            return;
           
            }
           
            // Беру первую таблицу
            QAxObject * Tables = word_selection->querySubObject("Tables(1)");
            if (!Tables){
                QMessageBox::information(0,"","Tables не взялся");
                return;
           
            }
            // Dsltkz. tt
            Tables->querySubObject("Selection()");
           


           // QMessageBox::about(0,"",Tables->querySubObject("Range")->querySubObject("Rows")->property("Count").toString()+" - "+Tables->querySubObject("Range")->querySubObject("Columns")->property("Count").toString() );

            int intCols = Tables->querySubObject("Range")->querySubObject("Columns")->property("Count").toInt();  //Получаю columns
            int intRows = Tables->querySubObject("Range")->querySubObject("Rows")->property("Count").toInt();          //Получаю rows

            // Доступ к ячейкам
            Cell = Tables->querySubObject("Cell(Row, Column)", i,2);
            CellRange = Cell->querySubObject("Range()");
            CellRange->property("Text").toString();
Записан
CJ1
Гость
« Ответ #7 : Июнь 18, 2012, 14:15 »

Модераторы, перенесите темку в ActivX
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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