Qt ActiveX QAxObject форматировать комментарий к ячейке Excel

Я хотел бы отформатировать комментарий к ячейке Microsoft Excel 2010 (например, изменить шрифт, жирный шрифт, ..)
используя Qt 5.

Я могу добавить комментарий к ячейке, используя следующий код:

QAxObject* cellRange = m_activeWorksheet->querySubObject("Cells(int, int)", row, col);
cellRange->dynamicCall("AddComment(const QVariant&)", comment);

Я также могу установить свойство AutoSize для комментария к ячейке:

QAxObject* axComment = cellRange->querySubObject("Comment");
QAxObject* shape = axComment->querySubObject("Shape");
shape->querySubObject("TextFrame")->setProperty("AutoSize", autosize);

Но я не могу изменить «более глубокие» свойства комментариев,
например TextFrame.Characters.Font.Bold.

После установки комментария к ячейке команда

shape->querySubObject("TextFrame")

возвращает ненулевой указатель,
но

shape->querySubObject("TextFrame")->querySubObject("Characters")

возвращает NULL.

Как мне отформатировать комментарии к ячейкам, используя QAxObject ?
Есть ли описание свойств / подобъектов для разных QAxObjects
доступны для QAxObject?

Следующий код не имеет никакого эффекта:

shape->setProperty("AutoShapeType", 5);

2

Решение

  1. Вероятно, проблема в том, что TextFrame не имеет имущество Characters, Вместо этого он имеет метод Characters, но это полная подпись

    Characters(Start, Length)
    

    Qt docs говорит что вы должны указать полную подпись, поэтому вы, вероятно, должны запросить значение с

    shape->querySubObject("TextFrame")->querySubObject("Characters(Start,Length)")
    
  2. Вы не можете установить AutoShapeType в 5, AutoShapeType имеет тип MsoAutoShapeType допускаются только указанные значения.

2

Другие решения

После просмотра документации Qt, QAxBase dynamicCAll
В разделе показано, как установить форму комментария к ячейке Excel.
используя динамический вызов:

QString comment("My comment");
QAxObject* cellRange = m_activeWorksheet->querySubObject("Cells(int, int)", cellRow, cellColumn);
cellRange->dynamicCall("AddComment(const QVariant&)", comment);
QAxObject* axComment = cellRange->querySubObject("Comment");
QAxObject* shape = axComment->querySubObject("Shape");
shape->dynamicCall("AutoShapeType", 5);

Значение можно найти по ссылке Lol4t0: Перечисление MsoAutoShapeType. Здесь 5 используется для получения скругленного прямоугольника (msoShapeRoundedRectangle). Вот оставшийся код для изменения формата текстового комментария:

QAxObject* textFrame = shape->querySubObject("TextFrame");
QAxObject* chars = textFrame->querySubObject("Characters(int, int)", 1, comment.size());
QAxObject* font = chars->querySubObject("Font");
font->setProperty("Bold", false);
shape->querySubObject("TextFrame")->querySubObject("Characters(2, 3)")->querySubObject("Font")->setProperty("Size", 24);
1

По вопросам рекламы [email protected]