Я хотел бы отформатировать комментарий к ячейке 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
s
доступны для QAxObject
?
Следующий код не имеет никакого эффекта:
shape->setProperty("AutoShapeType", 5);
Вероятно, проблема в том, что 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);