PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT und ActiveX


Mosher
2017-09-26, 06:21:22
EDIT: Problem gelöst. Ich hatte noch einen Logikfehler bei der Erstellung des Dateinamens für das Dokument. Somit wurde immer das falsche ausgewählt.

QAxObject *fields = active->querySubObject("Fields");
fields->dynamicCall("Update()");

funktioniert!




Hallo,

Ich verwende QT 5.9.1 mit MinGW, falls das eine Rolle spielt, um kleinere Anwendungen zu schreiben.

Komme nun zum ersten Mal mit ActiveX in Berührung und war bisher irgendwie nicht in der Lage, eine Dokumentation zu finden.

Ja, ich kenne die VBA-Dokumentation, aber die hilft mir nur bedingt, da es mir speziell auch um die richtige Syntax geht.

Wird vielleicht an einem Beispiel deutlich:


QAxObject axObject("Word.Application");
QAxObject *documents = axObject.querySubObject("Documents");
QAxObject *document = documents->querySubObject("Open(const QString&, bool)", str_DocTemplate, true);

QAxObject *active = axObject.querySubObject("ActiveDocument()");
QAxObject *content = active->querySubObject("Content()");
QAxObject *find = content ->querySubObject("Find");

[...]

QVariantList vl = ...
find->dynamicCall("Execute(...;

[...]



Das hier funktioniert prächtig und lässt sich auch anhand der Dokumentation nachvollziehen.

Jetzt möchte ich alle Felder in dem Dokument aktualisieren und dachte, hierfür die Update-Methode des Fields-Objekts verwenden zu können.

https://msdn.microsoft.com/en-us/vba/word-vba/articles/fields-update-method-word

Example

This example updates all the fields in the main story (that is, the main body) of the active document. A return value of 0 (zero) indicates that the fields were updated without error.

If ActiveDocument.Fields.Update = 0 Then
MsgBox "Update Successful"
Else
MsgBox "Field " &; ActiveDocument.Fields.Update &; _
" has an error"
End If


so steht es in der Doku.

In meiner grenzenlosen Naivität bin ich davon ausgegangen, dass ich mein Objekt 'fields'über

QAxObject *fields = active->querySubObject("Fields");


bekomme und darauf dann Update ausführen kann.


fields->dynamicCall("Update()");


Was leider nicht den gewünschten Effekt hat.
Es wird 0 zurückgegeben, doch das Feld im Dokument wird nicht aktualisiert.


Wo ist mein Fehler?
Gibt es eine Dokumentation zu diesem Thema, die mir die Funktionsaufrufe genauer beschreiben?

execute von weiter oben musste ich mir auch zusammengoogeln, weil ich auf der MS-Seite nicht fündig geworden bin.

Vielleicht habe ich aber auch nur ein Brett vor'm Kopf.

Vielen Dank für eure Hilfe,

Mosher