Добавление новой страницы в MS Word с использованием Qt - PullRequest
2 голосов
/ 12 июля 2010

Я использую Qt 4.5 и использую ActiveQt для генерации документов MS Word. Я могу создать документ на основе команд ActiveX VBA для MS Word. Но я не могу создать новую страницу в нужной позиции.

Я пытался

selection->dynamicCall("InsertBreak(const QString &)","wdPageBreak");
selection->dynamicCall("InsertParagraph(void)");
QAxObject *partTableParagraph = activeDocument->querySubObject("Paragraphs(1)");
partTableParagraph->setProperty("PageBreakBefore","True");
QAxObject *partTableRange = partTableParagraph->querySubObject("Range");
selection->dynamicCall("TypeText(const QString&)","second page contents");

но я все еще не могу создать новую страницу в документе word. Также содержимое не видно для второй страницы. то есть second page contents не видно.

Любые указания по этому поводу приветствуются.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2014

Попробуйте этот код. Я могу вставить новую страницу везде, где я вызываю этот метод:

void insertNewPage() {
    QAxObject* activeWindow = activeDocument->querySubObject( "ActiveWindow" );
    QAxObject* selection = activeWindow->querySubObject( "Selection" );
    selection->dynamicCall( "Collapse(int)", 0 );
    selection->dynamicCall( "InsertNewPage()" );
    selection->dynamicCall( "Collapse(int)", 0 );
}

Например, предположим, что у вас есть метод write для записи в ваш документ:

write( "This is a test. " );
write("With no newline but with a page break");
writePageBreak();
write("But this has a newline at the beginning and the end\n");

Вы закончите с This is a test. With no newline but with a page break на одной странице и But this has a newline at the beginning and the end на другой.

Я не проверяю NULL указатели, хотя:)

Что касается того, почему ваша вторая страница пуста ... Я использую это, чтобы написать в Word:

QAxObject* selection = activeWindow->querySubObject( "Selection" );
selection->dynamicCall( "InsertAfter(const QString&)",text);

и до сих пор это работало.

0 голосов
/ 02 апреля 2011

Я рекомендую сначала написать это как макрос VBA. После того, как вы установили его в VBA, вы сможете перевести его прямо на ActiveQt.

...