最近在做QT导出word报表,发现网上的资源不是很多,也浪费了很多时间,我自己做了一份demo,将会详细讲述如何做出需要样式的报表。在网上很容易查到java或者其他语言操作word的接口函数,但是QT能操作word的,不是很多,而且还不太好用。我把自己已经调试出来的代码,贡献出来,免得以后浪费时间。
写了一部分接口函数,可以满足大部分的word报表。在QT工程中,QWorddemo.pro中,需要加入如下:
QT默认安装在C盘中。
下载地址:http://download.csdn.net/download/blackbattery/10001438
分数有点高了,分享一个百度云盘网址:链接: https://pan.baidu.com/s/1qWv4tTY-VGPNONJUvyhLlw 提取码: esqk
链接:https://share.weiyun.com/59gwQjX 密码:v74rng

LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\qtmaind.lib
LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\Qt5Cored.lib
LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\Qt5Guid.lib
LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\Qt5Widgetsd.lib
LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\Qt5AxContainerd.lib
LIBS    +=C:\Qt\Qt5.5.1\5.5\msvc2010\lib\Qt5AxBased.lib

在word中插入表格:

void QWord::intsertTable(int row,int column)
{   QAxObject* tables = m_document->querySubObject("Tables"); QAxObject* selection = m_word->querySubObject("Selection");   QAxObject* range = selection->querySubObject("Range");QVariantList params;params.append(range->asVariant());       params.append(row);params.append(column);   tables->querySubObject("Add(QAxObject*, int, int, QVariant&, QVariant&)", params);QAxObject* table = selection->querySubObject("Tables(int)",1);table->setProperty("Style","网格型"); QAxObject* Borders = table->querySubObject("Borders");Borders->setProperty("InsideLineStyle",1);Borders->setProperty("OutsideLineStyle",1);QString doc = Borders->generateDocumentation();QFile outFile("D:\\360Downloads\\Picutres\\Borders.html");outFile.open(QIODevice::WriteOnly|QIODevice::Append);QTextStream ts(&outFile);ts<<doc<<endl;/*QString doc = tables->generateDocumentation();QFile outFile("D:\\360Downloads\\Picutres\\tables.html");outFile.open(QIODevice::WriteOnly|QIODevice::Append);QTextStream ts(&outFile);ts<<doc<<endl;*/
}

这是插入表格的函数,其中border使用画出表格边线。其中
QString doc = Borders->generateDocumentation();这部分代码是将其中的关于border属性导出来的。
合并单元格的函数有两种实现方法,我选择的是第一种,其中tableindex表示的是第几个table。
合并单元格的函数:

void QWord::MergeCells(int tableIndex, int nStartRow,int nStartCol,int nEndRow,int nEndCol)//合并单元格
{QAxObject* tables = m_document->querySubObject("Tables");QAxObject* table = tables->querySubObject("Item(int)",tableIndex);QAxObject* StartCell =table->querySubObject("Cell(int, int)",nStartRow,nStartCol);QAxObject* EndCell = table->querySubObject("Cell(int, int)",nEndRow,nEndCol);StartCell->querySubObject("Merge(QAxObject *)",EndCell->asVariant());
}
//第二种方法调用
// void QWord::MergeCells(int tableIndex, int nStartRow,int nStartCol,int nEndRow,int nEndCol)//合并单元格
// {
//  QAxObject* tables = m_document->querySubObject("Tables");
//  QAxObject* table = tables->querySubObject("Item(int)",tableIndex);
//  QAxObject* StartCell =table->querySubObject("Cell(int, int)",nStartRow,nStartCol);
//  QAxObject* EndCell = table->querySubObject("Cell(int, int)",nEndRow,nEndCol);
//  StartCell->dynamicCall("Merge(LPDISPATCH)",EndCell->asVariant());
// }插入图片的函数,需要考虑到图片的大小,固定单元格的大小,可以使图片自适应单元格的。
void QWord::insertCellPic(int row,int column,const QString& picPath)
{QAxObject* selection = m_word->querySubObject("Selection");  QAxObject* table = selection->querySubObject("Tables(1)");QAxObject* range = table->querySubObject("Cell(int, int)",row,column)->querySubObject("Range");range->querySubObject("InlineShapes")->dynamicCall("AddPicture(const QString&)",picPath);
}

还有增加行的需求,我又写了增加行的接口函数,提供给别人调用。

void QWord::addTableRow(int tableIndex ,int nRow,int rowCount)
{QAxObject* tables=m_document->querySubObject("Tables");QAxObject* table = tables->querySubObject("Item(int)",tableIndex);QAxObject* rows =table->querySubObject("Rows");int Count =rows->dynamicCall("Count").toInt();if(0< nRow && nRow < Count ){   for(int i =0; i< rowCount; ++i){QString sPos = QString("Item(%1)").arg(nRow+i);QAxObject* row= rows->querySubObject(sPos.toStdString().c_str());QVariant param =row ->asVariant();rows->dynamicCall("Add(Variant)",param);}         }
}

这个函数很重要,再插入表格的时候,当你插入第二个表格的时候,必须要使用此函数,要不然的话,
其他表格的数据将会覆盖第一个表格的内容。这个函数将光标移到末尾,跳出单元格。

void QWord::moveForEnd()//光标移到末尾,才能真正的跳出单元格
{QAxObject* selection = m_word->querySubObject("Selection");  QVariantList params;params.append(6);       params.append(0);       selection->dynamicCall("EndOf(QVariant&, QVariant&)", params).toInt();
}

关于部分接口函数的dynamicCall和querySubObject,需要注意,
querySubObject调用的是属性或者返回值,dynamicCall调用的是方法。

QT操作Word,插入表格相关推荐

  1. python win32com操作word插入指定表格图片

    python win32com操作word插入指定表格图片 在网上找了许久,最终自己摸索找到办法,直接上代码, import win32com.client as win32 from win32co ...

  2. 解决 Java poi 3.8 等版本 操作 word 插入 图片 不成功的问题

    解决 Java poi 3.8等版本操作word插入图片不成功的问题 问题: 最近有一个需求是将Excel中的数据转换到word中,其中包括了文字和图片, 在使用 poi 3.8 向word中写入图片 ...

  3. Word插入表格相邻单元格边框断开方法

    Word插入表格相邻单元格边框断开方法 写论文要将相邻单元格边框打断,见了很多教程,这里详细讲解一些如何实现,重点要掌握应用于单元格和段落的边框是不同的,应用于段落的边框之间是分开的. 实现效果: 操 ...

  4. poi设置word表格单元格宽度_xwpftable设置宽度;POI操作Word设置表格宽度

    poi 操作word里表格,如设置表格宽度.行高.表格样式等. 1.表格或单元格宽度: 默认TblW的type属性为STTblWidth.AUTO,即自动伸缩.所以要调整为指定类型:STTblWidt ...

  5. java word表格_java操作word的表格

    java操作word的表格 最近项目中需要把提交的页面表单的数据动态写在word模板中,简单的写了个工具类.里面有怎眼操作word 中表格的内容,可以在word中已有的表格后面添加行并且可以增加内容. ...

  6. VC操作word绘制表格

    VC操作word绘制表格时,需要选择绘制好的整个表格框居中显示, 1,如何选中整个表格框,表格的对象table,然后居中 2.表格的个性化设置,表格项内再次设计一个m*n的表格框            ...

  7. Speedoffice(word)插入表格,如何合并单元格?

    在用Word制作表格的时候,有时插入的表格需要合并单元格,那怎么合并了?以最常用的speedoffice为例和大家分享一下. 1,首先运行软件,新建一份word插入表格作为演示,接着选中需要合并的单元 ...

  8. POI操作Word设置表格在字体加粗【XWPFTableCell设置字体】Java操作Word调样式

    Jar包的版本号:[不同的版本号也许也可以,可以尝试一下,哈哈哈哈~] ----------因为代码在内网环境中无法复制出来,所以这里就截图了,兄弟们自己敲一下键盘吧~ POI操作Word设置表格在字 ...

  9. 知识学习1:word插入表格,标题行边框分开设置

    知识学习1:word插入表格,标题行边框分开设置 遇到问题:发表文章中,表格基本是三线形势,当标题行1个单元格涵盖多行内容,又有多块内容时,将每块内容分开会更加清晰,那么应该怎么设置内. 示例: 设置 ...

  10. POI-5.2.2 操作 word 【表格】

    poi 3.17操作Word工具包,点击此处 当前版本 5.2.2 ,版本不同,写法略有差异 - poi-5.2.2 操作word [段落] - poi-5.2.2 操作word [表格] - poi ...

最新文章

  1. 13、JsonResponse响应介绍
  2. windows10 上运行 linux -- WSL(Windows Subsystem for Linux)
  3. python课程推荐-推荐几个优质的 Python 学习资料(良心推荐,非广告)
  4. GridView实现用...代替超长字符串
  5. Centos7开启SSH服务
  6. CISCO ACL配置全解
  7. matlab tsai手眼标定程序代码_标定系列一 | 机器人手眼标定的基础理论分析
  8. 华为cor—al10_cor al10是华为什么型号 cor al10是华为啥型号
  9. 潜龙号开启水下机器人_国内首个智能绞吸机器人开展水下取土作业
  10. 转载——三种编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法)...
  11. C/C++[黑盒测试]
  12. npy文件转换为txt文件
  13. 3d之家开机号计算机网,3d之家最新开机号
  14. 博客群建软件-关键词要如何优化才能有好的排名
  15. 中国为何与诺贝尔奖无缘?
  16. 【自动驾驶】浅谈自动驾驶在业界的发展
  17. 300多张电脑壁纸打包下载,高清电脑壁纸
  18. JavaScript 每日一题 #8
  19. jdbc连接字符集为us7ascii的oracle数据库乱码解决办法
  20. ClassFactory 无法供应请求的类 (异常来自 HRESULT:0x80040111 (CLASS_E_CLASSNOTAVAILABLE))

热门文章

  1. 浅析Java中的Steam流
  2. php截取字符串中间一段,PHP截取字符串中间的内容的两种方法
  3. 3D Vision--将点云投影至平面
  4. python 实现华安信达论坛自动登录
  5. 电子邮件是如何跟踪您的?
  6. ssm图片上传前端Ajax
  7. java后台代码实现笛卡尔积
  8. 日报 1 | 配置Python环境
  9. qt Windows 任务栏右键退出时子进程不退出
  10. 【PHP100例】PHP处理表单数据