项目要求使用QT软件后自动生成测试文档:
实现过程如下所示:
新建模板工程
在模板插入书签:
工程中添加如下
QT += core gui axcontainer
代码注释如下:
首选新建一个word文档:
void Widget::create_word()
{
//新建一个word应用程序
word= new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
//并设置为不可见
word->setProperty("Visible",false);
word->setProperty("DisplayAlerts", true);
//获取所有的工作文档
documents = word->querySubObject("Documents");
//以test2.dot为模板新建一个文档
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();
//获取文档中名字为Data1的标签
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); //进行替换操作
}
//获取文档中名字为Data2的标签
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); //进行替换操作
}
//获取文档中名字为Data3的标签
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); //进行替换操作
}
//获取文档中名字为Data4的标签
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)//注意这个判断不可少,否则下面调用isNull()时会出错
{
return;
}