Обо мне

Моя фотография
Индивид, которому нравится слушать качественную музыку, а потом делиться впечатлениями с другими!

среда, 30 марта 2011 г.

[Qt] Поиск и замена текста в Microsoft Word посредством ActiveQt

Обратил внимание на то, что в интернете на форумах достаточно сложно найти информацию о том, как производить поиск и замену текста в Microsoft Word посредством ActiveQt. Для собственного проекта написал следующую процедуру:

void MsWordDocument::replaceString(const QString& oldString, const QString& newString)
{
  QAxObject* WordSelection = WordApplication->querySubObject("Selection");

  QAxObject* Find = WordSelection->querySubObject("Find");
  if (!Find) return;
  Find->dynamicCall("ClearFormatting()");

  QList<QVariant> params;
  params.operator << (QVariant(oldString));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant(true));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant(newString));
  params.operator << (QVariant("2"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  params.operator << (QVariant("0"));
  Find->dynamicCall("Execute(const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,"
                    "const QVariant&,const QVariant&,const QVariant&)",
                    params);
 
}
Более подробную информацию о передаваемых параметрах можно прочитать на MSDN 

1 комментарий:

  1. Спасибо. Очень помогло :-)
    Возник вопрос, почему так нельзя:
    QAxObject* WordFind = WordApplication->querySubObject("Selection")->querySubObject("Find");

    WordFind->dynamicCall("ClearFormatting()");
    WordFind->querySubObject("Replacement")->dynamicCall("ClearFormatting()");
    WordFind->dynamicCall("SetText(QVariant)","2013");
    WordFind->querySubObject("Replacement")->dynamicCall("SetText(QVariant)","9999");
    WordFind->dynamicCall("SetForward(bool)",true);
    WordFind->dynamicCall("SetWrap(QVariant)",1);
    WordFind->dynamicCall("SetFormat(bool)",false);
    WordFind->dynamicCall("SetMatchCase(bool)",false);
    WordFind->dynamicCall("SetMatchWholeWord(bool)",true);
    WordFind->dynamicCall("SetMatchWildcards(bool)",false);
    WordFind->dynamicCall("SetMatchSoundsLike(bool)",false);
    WordFind->dynamicCall("SetMatchAllWordForms(bool)",false);
    WordFind->dynamicCall("Execute(Replace:=const QVariant&)",QVariant(2));

    ОтветитьУдалить