2010-07-12 8 views
2

J'utilise Qt 4.5 et en utilisant ActiveQt pour générer des documents MS Word. Je suis capable de créer un document basé sur les commandes ActiveX de VBA pour MS Word. Mais je ne suis pas en mesure de créer une nouvelle page à la position souhaitée.Ajout d'une nouvelle page dans MS Word en utilisant Qt

J'ai essayé

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"); 

mais je ne suis pas en mesure de créer une nouvelle page dans le document Word. De plus, le contenu n'est pas visible pour la deuxième page. i.e second page contents n'est pas visible.

Tous les pointeurs à ce sujet sont les bienvenus.

Répondre

0

Je vous recommande d'écrire ceci en tant que macro VBA en premier. Une fois que vous l'avez fait fonctionner dans VBA, vous devriez être capable de le traduire directement en ActiveQt.

0

Essayez ce code. Je suis en mesure d'insérer une nouvelle page où j'appelle cette méthode:

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); 
} 

Par exemple, en supposant que vous avez une méthode write pour écrire à votre document:

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"); 

Vous allez finir avec This is a test. With no newline but with a page break dans une page et But this has a newline at the beginning and the end dans l'autre.

Je ne suis pas la vérification des pointeurs NULL, bien que :)

Quant à savoir pourquoi votre deuxième page est vide ... J'utilise ceci pour écrire Word:

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

et jusqu'à présent ça a marché.

Questions connexes