Qt ActiveX QAxObject 格式 Excel 单元格注释
Posted
技术标签:
【中文标题】Qt ActiveX QAxObject 格式 Excel 单元格注释【英文标题】:Qt ActiveX QAxObject format Excel cell comment 【发布时间】:2014-10-13 13:49:22 【问题描述】:我想格式化 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
格式化单元格 cmets?
是否有不同QAxObject
s 的属性/子对象的描述
QAxObject
可以访问吗?
以下代码没有任何作用:
shape->setProperty("AutoShapeType", 5);
【问题讨论】:
您是否尝试过 dumpObjectTree() 和 dumpObjectInfo() 以获取更多信息? 嗨 Siliconmancer,还没有,但我会试一试。 Lol4t0 对 Characters 问题的解决方案有效:我使用 querySubObject("Characters(int, int)", 1, commentString.size()) 【参考方案1】:问题可能是TextFrame 没有属性 Characters
。相反,它有方法 Characters
,但是it full signature is
Characters(Start, Length)
Qt docs says 你应该指定完整的签名,所以你应该用
查询值shape->querySubObject("TextFrame")->querySubObject("Characters(Start,Length)")
您不能将AutoShapeType
设置为5
。 AutoShapeType
是 MsoAutoShapeType 类型,并且只允许指定值。
【讨论】:
根据msdn.microsoft.com/en-us/library/office/…, msoShapeRoundedRectangle 的值应该是 5(圆角矩形),因此我不明白为什么 shape->setProperty("AutoShapeType", 5);不应该工作。能否给出一个完整的代码示例,如何将形状设置为圆角矩形。 好吧,看起来很奇怪,但是你有没有尝试过shape->setProperty("AutoShapeType", "msoShapeSnipRoundRectangle");
,就像docs 的例子一样。否则看起来shape->setProperty("AutoShapeType", "5");
(带qoutes)也应该工作。如果是的话,我会写一个解释。
即使有引号,形状也不会改变。【参考方案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 Enumeration。这里 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);
【讨论】:
以上是关于Qt ActiveX QAxObject 格式 Excel 单元格注释的主要内容,如果未能解决你的问题,请参考以下文章
Qt QWebEngine - 使用 HTML <a> 锚点
Qt笔记-利用QAxObject将文件夹内的所有docx转pdf
Qt笔记-利用QAxObject将文件夹内的所有docx转pdf