Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Июнь 17, 2012, 17:59



Название: Word ActiveX
Отправлено: CJ1 от Июнь 17, 2012, 17:59
Скажите, где берутся команды ворда для работы в activex?


Название: Re: Word ActiveX
Отправлено: Bepec от Июнь 17, 2012, 20:25
В msdn искать не пробовали?


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 18, 2012, 07:28
Пробовал, как обычно не нашел! Мне нружна работа с таблицами, считывания ячеек


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 18, 2012, 08:00
Короче я нашел кучу свойств. Точнее я просто сделал generateDocument и вобщем там многое, и все работает, но как обращатся к таблици нету!!!!!!!!!!!!!!!


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 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()");

Ошибок не дает, но и значения не возвращает!


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 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;

Но не нашел как получать количество строк и столбцов


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 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();


Название: Re: Word ActiveX
Отправлено: CJ1 от Июнь 18, 2012, 14:15
Модераторы, перенесите темку в ActivX