Qt QAxObject操作excel文件过程总结
最近由于需要Qt来操作Excel文件,所以想把QAxObject用起来,此次使用也是机缘巧合,记录了一下心路历程。
此前走了很多弯路,希望做同样事情的人就别纠缠于同样的错误就好。
配制方面:
1、确保Excel软件在本地服务器注册成功,没注册成功的可以通过 在运行中"E:\program Files\Microsoft Office\Office12\EXCEL.EXE" /regserver 手动注册,注意路径要用自己的excel路径。
2、确保组件配制正确,运行命令:dcomcnfg,查看DCOM配置下是否有Microsoft Excel Application,有的话万事大吉,开始设置(1)常规,身份验证:无(2)安全、配制权限自定义,控制权限,完全控制选中,保存
以上确保QAxObject可以正常被调用
程序方面:
1、工程pro文件添加
CONFIG += qaxcontainer
2、.h文件添加
/1./打开
void newExcel(const QString &fileName);
//2.增加1个Worksheet
void appendSheet(const QString &sheetName,int cnt);
//3.向Excel单元格中写入数据
void setCellValue(int row, int column, const QString &value);
//4.保存Excel
void saveExcel(const QString &fileName);
//5.释放Excel
void freeExcel();
3、.cpp文件
//1.新建一个excel
void MainWindow::newExcel(const QString &fileName)
{ HRESULT r = OleInitialize(0);
CoInitialize(0);
if (r != S_OK && r != S_FALSE) {
qWarning("Qt: Could not initialize OLE (error %x)\n", (unsigned int)r);
}
pApplication = new QAxObject("Excel.Application");
if(pApplication == NULL){
qWarning("pApplication\n");return;
}
pApplication->dynamicCall("SetVisible(bool)", false);//false不显示窗体
pApplication->setProperty("DisplayAlerts", false);//不显示任何警告信息。
pWorkBooks = pApplication->querySubObject("Workbooks");
QFile file(fileName);
if (file.exists())
{
pWorkBook = pWorkBooks->querySubObject("Open(const QString &)", fileName);
}
else
{
pWorkBooks->dynamicCall("Add");
pWorkBook = pApplication->querySubObject("ActiveWorkBook");
}
pSheets = pWorkBook->querySubObject("Sheets");
pSheet = pSheets->querySubObject("Item(int)", 1);
}
//2.增加1个Worksheet
void MainWindow::appendSheet(const QString &sheetName,int cnt)
{
QAxObject *pLastSheet = pSheets->querySubObject("Item(int)", cnt);
pSheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());
pSheet = pSheets->querySubObject("Item(int)", cnt);
pLastSheet->dynamicCall("Move(QVariant)", pSheet->asVariant());
pSheet->setProperty("Name", sheetName);
}
//3.向Excel单元格中写入数据
void MainWindow::setCellValue(int row, int column, const QString &value)
{
QAxObject *pRange = pSheet->querySubObject("Cells(int,int)", row, column);
pRange->dynamicCall("Value", value);
}
//4.保存Excel
void MainWindow::saveExcel(const QString &fileName)
{
pWorkBook->dynamicCall("SaveAs(const QString &)",
QDir::toNativeSeparators(fileName));
}
//5.释放Excel
void MainWindow::freeExcel()
{
if (pApplication != NULL)
{
pApplication->dynamicCall("Quit()");
delete pApplication;
pApplication = NULL;
}
}
附上测试的button槽函数
void MainWindow::on_pushButton_keting_clicked()
{
OleInitialize(0);
QString fileNametmp = "d:/112.xls"; //文件名可从此处修改
newExcel(fileNametmp);
// appendSheet("page1");
setCellValue(3, 3,"34343");
setCellValue(3, 6,"55555");
saveExcel(fileNametmp);
freeExcel();
return;
}
此次学习、总结也看了很多人的东西,吸取了它人的一些方法,也改正了部分错误,希望开启顺利之旅!
Qt QAxObject操作excel文件过程总结相关推荐
- qt 进程打开excel_Qt QAxObject操作excel文件过程总结(转):(示例代码)
正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...
- Qt中打开excel文件
qt中打开excel文件有两种方法 第一种,用QAxObject,在使用QAxObject,要在.pro文件中添加QT += axcontainer,同时在调用文件中添加#include <QA ...
- C#操作Excel文件(转)
摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...
- 详解Python操作Excel文件
前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...
- Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- abaqus python实例_abaqus Python实例-操作excel文件
abaqus Python实例--操作excel文件目前处理数据离不开excel,所以pythoner必须学会用python操作excel表格.Python 与excel交互方法也比较多,我一开始就接 ...
- 不安装Office操作Excel文件(.xlsx)
1.使用场景: 在不安装Office组件包的情况下,操作Excel文件(.xlsx).以前做过的好几个项目中,都需要对Excel文件处理,特别是将统计成果按照一定的格式和样式输出到Excel中,或将固 ...
- C#操作Excel文件
C#操作Excel文件 前言 好久没更新博客了,趁着最近经常需要使用到Excel,就随手更新下博客把!由于之前一直使用的是Microsoft.Office.Interop.Excel,但是呢,在使用的 ...
- openpythonxl_Python操作Excel文件(3):优雅干将openxlpy
本文共4000余字,预计阅读时间16分钟,本文知乎连接:Python操作Excel文件(3):优雅干将openpyxl,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwi ...
最新文章
- python 词云_python数据可视化——词云
- 研究揭示动物社交欲望的神经机制
- 人生第一次手术:0809
- 新版谷歌浏览器怎么查找和改变编码格式
- 从零开始搭建一个简单的ui自动化测试框架02(pytest+selenium+allure)
- 怎么修改监控服务器的密码,服务器状态监控怎么设置密码
- C# VS 调试 动态加载的 DLL
- tensorboard 1.14.0 has requirement setuptools>=41.0.0, but you‘ll have setuptools 40.2.0
- Nginx+Tomcat代理环境下JS无法完全加载问题
- office2010 反应慢_office2010打开时间太慢。怎么办?
- Android 原生的人脸识别Camera+FaceDetector示例
- SPSS实现两独立样本非参数检验
- Qt C++制作桌面天气,无边框、透明窗口,心知天气API,开放源码
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】...
- 【理财】3.富人思维
- 二维码生成器怎么在线制作?制作二维码其实很简单
- MPU6050 DMP 代码完全解析 —— dmp_init
- 群晖NAS搭建web服务器并公网可访问 1-4
- “不安分”的花椒直播,搞了史上首个网红演唱会
- Mysql常用命令行大全(三)
热门文章
- 高斯-约当(Gauss-Jordan)消元法——c++代码实现
- 台式计算机开关键,台式电脑怎么开机
- 解决No such file or directory: /turtlebot3/turtlebot3_description/urdf/turtlebot3_.urdf.xacro
- 【python教程入门学习】ASCII码一览表,ASCII码对照表
- 摩托罗拉刷机维修服务器,摩托罗拉手机通用刷机教程
- 在本计算机无法启动用友通服务器,用友通客户端连接不上服务器解决方案
- 苹果手机服务器找不到,电脑找不到苹果手机热点
- Citrix Receiver卸载方法
- 2.JVM垃圾回收机制-什么时候回收内存
- ppt中只有声音没有图像处理