项目要求使用QT软件后自动生成测试文档:
实现过程如下所示:
新建模板工程
在模板插入书签:
工程中添加如下
QT += core gui axcontainer
代码注释如下: 首选新建一个word文档:
void Widget::create_word()
{
word= new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
word->setProperty("Visible",false);
word->setProperty("DisplayAlerts", true);
documents = word->querySubObject("Documents");
documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:/Qt/QTT/t/54321.dot"));
document= word->querySubObject("ActiveDocument");
if (!document) {
QMessageBox::warning(this, tr("警告"), tr("无法获得Documents对象!"),QMessageBox::Ok);
return ;
}
}
最后根据代码的逻辑,在代码中实现要插入word 中的内容: 根据书签内容,在指定位置插入指定数据
if(cBox->currentText() == "1.1 常用制动1")
{
qDebug()<<cBox->currentText();
QAxObject *bookmark_Data1 = document->querySubObject("Bookmarks(QVariant)","Data1");
if(!bookmark_Data1->isNull())
{
QString sText= "1";
qDebug()<<sText;
bookmark_Data1->dynamicCall("Select(void)");
bookmark_Data1->querySubObject("Range")->setProperty("Text",sText);
}
QAxObject *bookmark_Data2 = document->querySubObject("Bookmarks(QVariant)","Data2");
if(!bookmark_Data2->isNull())
{
QString pText="2";
qDebug()<<pText;
bookmark_Data2->dynamicCall("Select(void)");
bookmark_Data2->querySubObject("Range")->setProperty("Text",pText);
}
QAxObject *bookmark_Data3 = document->querySubObject("Bookmarks(QVariant)","Data3");
if(!bookmark_Data3->isNull())
{
QString bText= "3";
qDebug()<<bText;
bookmark_Data3->dynamicCall("Select(void)");
bookmark_Data3->querySubObject("Range")->setProperty("Text",bText);
}
QAxObject *bookmark_Data4 = document->querySubObject("Bookmarks(QVariant)","Data4");
if(!bookmark_Data4->isNull())
{
QString bText= "4";
qDebug()<<bText;
bookmark_Data4->dynamicCall("Select(void)");
bookmark_Data4->querySubObject("Range")->setProperty("Text",bText);
}
}
结果显示
指定位置插入指定数据
注意事项:
1、word 文件格式必须为dot格式,使用文件的绝对路径。
2、word 中插入位置都是根据模板文档的书签位置决定的,因此,书签一定要和代码书签名称对应上。
3、添加的自动化生成测试文档,会造成gui界面生成卡顿,可以考虑多线程解决此问题。
4、如果代码查找不到对应书签 程序会崩溃退出。添加如下错误判断可以解决。
if(NULL == bookmark_text)
{
return;
}
|