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
? Есть ли описание свойств / подобъектов для разных QAxObject
доступны QAxObject
?
Следующий код не имеет никакого эффекта:
shape->setProperty("AutoShapeType", 5);
2 ответа
Вероятно, проблема в том, что TextFrame не имеет свойства
Characters
, Вместо этого есть методCharacters
, но это полная подписьCharacters(Start, Length)
Qt docs говорит, что вы должны указать полную подпись, поэтому вам, вероятно, следует запросить значение с
shape->querySubObject("TextFrame")->querySubObject("Characters(Start,Length)")
Вы не можете установить
AutoShapeType
в5
,AutoShapeType
имеет тип MsoAutoShapeType, допускаются только указанные значения.
После просмотра документов 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);