#c #qt #ms-word #word #qaxobject
#c #qt #ms-word #word #qaxobject
Вопрос:
Я действительно новичок в QT, и мне было поручено программно обновить некоторые значения полей в документе word, в настоящее время я могу заменить текст из документа Word нормально, но когда это значение поля находится внутри объекта (таблицы или чего-либо еще), он не работает, мой код:
QString outFile("D:\#test files\output.docx");
QString inFile1("D:\#test files\input.docx");
QAxObject axObject("Word.Application");
QAxObject* documents = axObject.querySubObject("Documents");
QAxObject* document = documents->querySubObject("Open(const QStringamp;, bool)", inFile1, true);
QAxObject* selection = axObject.querySubObject("Selection");
auto find = selection->querySubObject("Find");
QString sOld = "${name}";
QString sNew = "Ibrahim";
bool bMatchCase = false;
bool bMatchWholeWord = false;
bool bMatchWildCards = false;
bool bReplaceAll = true;
QVariantList vl = { sOld, bMatchCase, bMatchWholeWord, bMatchWildCards, false, false, true, 1, false, sNew, bReplaceAll ? "2" : "1" };
find->dynamicCall("Execute(QString,bool,bool,bool,bool,bool,bool,int,bool,QString,int)", vl);
document->dynamicCall("SaveAs(const QStringamp;)", outFile);
document->dynamicCall("Close()");
axObject.dynamicCall("Quit()");
Если вы можете помочь, это было бы здорово 🙂
Комментарии:
1. Я бы предложил исключить слово «поля» из вашего заголовка, потому что вы заменяете конкретный текст, а не поле Word. Таким образом, вы получите более уместное внимание. Если вы можете изменить характер целевых файлов, вам не мешало бы заменить ваши цели реальными полями Word DocVariable или DocProperty. Затем используйте свой код для изменения переменной или свойств и обновления связанных полей в документах. Некоторые свойства документа (в меню Быстрые части> Свойства документа) сопоставляются с точками данных XML и не требуют обновления полей, если они используются.
2. на самом деле мы создаем поля: Вставка -> Быстрые части -> Поле, затем выбираем тип поля, возможно, это неправильно, но я не знаю, как создать другие шаблоны, потому что документ Word должен содержать некоторый заполнитель, куда я могу программно добавить некоторые значения
3. Заполнителем может быть (1) поле DocVariable или (2) поле DocProperty. Вы можете изменить переменные или свойства с помощью кода, а затем обновить поле. Вы также можете использовать один из отображенных элементов управления содержимым DocProperty, и в этом случае нет необходимости обновлять поле, если свойство изменено. Это происходит автоматически. Подробнее об этом на моей соответствующей странице: addbalance.com/word/MappedControls.htm
4. эй, чувак, спасибо, не могли бы вы написать это как решение, чтобы я мог пометить его как ответ: D
Ответ №1:
Если вы можете изменить характер целевых файлов, вам не мешало бы заменить ваши цели реальными полями Word DocVariable или DocProperty. Затем используйте свой код для изменения переменной или свойств и обновления связанных полей в документах. Некоторые свойства документа (в меню Быстрые части> Свойства документа) сопоставляются с точками данных XML и не требуют обновления полей, если они используются.
Заполнителем может быть (1) поле DocVariable или (2) поле DocProperty. Вы можете изменить переменные или свойства с помощью кода, а затем обновить поле.
Вы также можете использовать один из встроенных элементов управления отображением содержимого свойств документа, и в этом случае нет необходимости обновлять поле при изменении свойства. Это происходит автоматически. Подробнее об этом на моей связанной странице: Повторяющиеся элементы управления содержимым свойств документа, сопоставленные с данными, или другие элементы управления отображаемым содержимым.
Вот ссылки на две страницы Word MVP по доступу к свойствам документа с помощью vba.