Russian Qt Forum

Qt => ActiveX => Тема начата: Maclaren_4 от Апреля 24, 2012, 15:39



Название: qt and MS WORD
Отправлено: Maclaren_4 от Апреля 24, 2012, 15:39
Здравствуйте !!!
Кто работал с MS WORD в QT !!???

У меня есть таблица , как добавить строку ???
Как скрыть границы ???
И как скопировать существующую таблицу и вставить после первой ???


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Апреля 25, 2012, 11:32
С строками разобрался кому нид вот код :

Код:
   QAxObject* Tables = ActD->querySubObject("Tables()");
   QAxObject* NewTable = Tables->querySubObject("Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior)",
                                                ActD->dynamicCall("Range()"), 4,4,1,1);

   QAxObject * row = NewTable->querySubObject("Rows()");
  
   row->dynamicCall("Add()");

Вопрос с копирование таблицы остается АКТУАЛЬНЫМ !!! (Помогите разве никто не сталкивался ???!!!)


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Июня 14, 2012, 12:46
Помогите срочно !!! Как открыть файл (*.док) только для чтения !!!!


Название: Re: qt and MS WORD
Отправлено: hadey от Июня 14, 2012, 13:55
Может поможет.
    word_app = new QAxObject("Word.Application", this);
    if (!word_app)
        return false;

    word_file = word_app->querySubObject("Documents()");
    if (!word_file)
        return false;

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

    word_selection = word_app->querySubObject("Selection");
    if (!word_selection)
        return false;

    word_find = word_selection->querySubObject("Find");
    if (!word_find)
        return false;

    word_app->querySubObject("ActiveDocument")->dynamicCall("Close()");
    word_app->dynamicCall("SetDisplayAlerts(bool)", FALSE);
    word_app->dynamicCall("Quit()");


Название: Re: qt and MS WORD
Отправлено: CJ1 от Июня 17, 2012, 12:50
Нужна помощь, есть файл doc, нужно его открыть, найти в нем первую таблицу, и загрузить каждый элемент к себе в прогу, как получить доступ к ячейкам?


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Июня 20, 2012, 15:07
Код:
            QList<QString> t;
            mQ->setQuery("Select Владелец.Владелец , Владелец.Адресс, Владелец.Телефон, Владелец.email, Владелец.Клуб from View, Animals, Владелец where Владелец.ID_Owner= Animals.ID_Owner And Animals.ID_Cat=View.ID_Cat And View.ID = 1",dbSql);
            for (int i = 0 ; i < mQ->rowCount();i++)
            {
                QString top = QString::number(i+1).append("_").append(mQ->data(mQ->index(i,0)).toString().append("_").append(mQ->data(mQ->index(i,1)).toString().append("_").append(mQ->data(mQ->index(i,2)).toString().append("_").append(mQ->data(mQ->index(i,3)).toString().append("_")).append(mQ->data(mQ->index(i,4)).toString()))));
                qDebug() << top;
                t.append(top);
            }
            QAxObject *Wa = new QAxObject ("Word.Application");
            QAxObject *Wd = Wa->querySubObject("Documents()");
            Wd->querySubObject("Open(QVariant)",QDir::currentPath().append("\\Rep\\NygdaychieV_Gostinace.doc"));
            Wa->setProperty("Visible",true);
            QAxObject* ActD = Wa->querySubObject("ActiveDocument()") ;
            QAxObject* range = ActD->querySubObject("Tables(1)") ;
             QAxObject* row = range->querySubObject("Rows()") ;
            //--------------------------------------------------------------
            QAxObject* cell = range->querySubObject("Cell(Row, Column)" , 0,0) ;
            QAxObject *celR = cell->querySubObject("Range()") ;
            qDebug() << t.size();
            for (int i = 0 ;i < t.size();i++)
            {
                row->dynamicCall("Add()") ;
                qDebug()<< i ;
                QString f = t.at((i));
                QStringList g = f.split("_");
                qDebug()<< g.at(1);
                for (int j = 0 ; j < g.size() ; j++)
                {
                    cell = range->querySubObject("Cell(Row, Column)" , i+1,j+1) ;
                    celR = cell->querySubObject("Range()") ;
                    celR->dynamicCall("InsertAfter(Text)" ,g.at(j)) ;
                }
            }
return;

Вот функция , считывает з базы данных данные и заносит их в таблицу в  *.doc !!


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Июня 20, 2012, 15:08
Как перейти на новую страницу ??


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Июня 30, 2012, 14:53
Как скопировать таблицу ????
Я делаю вот так :
Код:
    QAxObject *Wa = new QAxObject ("Word.Application");
    QAxObject *Wd = Wa->querySubObject("Documents()");
    Wd->querySubObject("Open(QVariant)",QDir::currentPath().append("\\Rep\\test.doc"));
    Wa->setProperty("Visible",true);
    QAxObject* ActD = Wa->querySubObject("ActiveDocument()") ;
    QAxObject* Range_1 = ActD->querySubObject("Range()") ;

    QAxObject* Tables = ActD->querySubObject("Tables()") ;
    QAxObject* NewTables = Tables->querySubObject("Add(Range, NumRows, NumColumns, DefaultTablesBehavior, AutoFitBehavior)",
                                                  ActD->dynamicCall("Range()"),4,4,1,1) ;

    //QAxObject* Range_2 = ActD->querySubObject("Range()") ;
    NewTables->dynamicCall("Select()") ;
    NewTables->dynamicCall("Copy()");


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Июля 01, 2012, 19:06
как написать в Qt такой макрос ???   

Selection.Tables(1).Select
    Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderRight).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
    Selection.MoveDown Unit:=wdLine, Count:=2


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Августа 26, 2012, 17:04
Как в ячейке сделать выравнивание по центру????


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Августа 26, 2012, 23:01
Готово !! кому понадобиться , пользуйтесь !!!
Код:
QAxObject *Wa = new QAxObject ("Word.Application");
QAxObject *Wd = Wa->querySubObject("Documents()");
QString ex = QDir::currentPath().append("\\Rep\\test.doc");
Wd->querySubObject("Open(QVariant)",ex );//OtchetV_CMI
Wa->setProperty("Visible",true);
QAxObject* ActD = Wa->querySubObject("ActiveDocument()") ;
QAxObject* range = ActD->querySubObject("Tables(1)") ;
QAxObject* row = range->querySubObject("Rows()") ;
QAxObject* cell = range->querySubObject("Cell(Row, Column)" , 0,0) ;
QAxObject *celR = cell->querySubObject("Range()") ;
QAxObject* selection = Wa->querySubObject("Selection") ;
                                QAxObject* pswds=selection->querySubObject("ParagraphFormat()");
                                pswds->dynamicCall("SetAlignment(WdParagraphAlignment)" ,1) ;


Название: Re: qt and MS WORD
Отправлено: Maclaren_4 от Сентября 17, 2012, 23:59
Кто знает как вставить разрыв страницы , в средине таблицы !!???
Я делаю вот так не получаеться !!!
Код:
QAxObject* cell = range->querySubObject("Cell(Row, Column)" , 3,1) ;
    QAxObject* row = range->querySubObject("Rows()");
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    row->dynamicCall("Add()") ;
    QAxObject *celR = cell->querySubObject("Range()") ;
    celR = cell->querySubObject("Range()") ;
     celR->dynamicCall("InsertBreak()");