Qt Excel
在pro文件添加
QT +=axcontainer
头文件
#include <QAxObject>
void MainWindow::on_btnSelectFileDialog_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,"select Excel",excelDir,tr("Excel Files (*.xlsx *.xls)"));
if(fileName.lastIndexOf("/")>)
{
excelDir=fileName.mid(,fileName.lastIndexOf("/")+);
excelNewName=fileName.mid(fileName.lastIndexOf("/")+);
excelNewName=excelNewName.mid(,excelNewName.lastIndexOf("."))+"_new"+excelNewName.mid(excelNewName.lastIndexOf(".")); }
ui->leSourceExcel->setText(fileName); } QList<QString> tempData;
void MainWindow::on_btnGenerate_clicked()
{ //读取excel
QAxObject *myExcel=new QAxObject("Excel.Application");
if(!myExcel){ QMessageBox::critical(this, "错误信息", "EXCEL对象丢失");
return; }
myExcel->dynamicCall("SetVisible(bool)",false);
QAxObject *workBooks=myExcel->querySubObject("WorkBooks");
QAxObject *workBook=workBooks->querySubObject("Open(QString,QVariant",ui->leSourceExcel->text());
QAxObject * workSheet = workBook->querySubObject("WorkSheets(int)", );//打开第一个sheet //QAxObject * worksheet = workbook->querySubObject("WorkSheets");//获取sheets的集合指针
//int intCount = worksheet->property("Count").toInt();//获取sheets的数量 QAxObject * usedRange = workSheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
QAxObject * rows = usedRange->querySubObject("Rows");
QAxObject * columns = usedRange->querySubObject("Columns"); //获取行数和列数
int intRowStart = usedRange->property("Row").toInt();
int intColStart = usedRange->property("Column").toInt();
int intCols = columns->property("Count").toInt();
int intRows = rows->property("Count").toInt(); //获取excel内容
QString rowData;
tempData.clear();
for (int i = intRowStart; i < intRowStart + intRows; i++) //行
{
rowData="";
for (int j = intColStart; j < intColStart + intCols; j++) //列
{
QAxObject * cell = workSheet->querySubObject("Cells(int,int)", i, j ); //获取单元格 qDebug() << i << j <<cell->dynamicCall("Value2()").toString(); //正确
rowData+=cell->dynamicCall("Value2()").toString()+",";
}
tempData.append(rowData); }
workBook->dynamicCall("Close (Boolean)", false);
myExcel->dynamicCall("Quit(void)");
delete myExcel;//一定要记得删除,要不线程中会一直打开excel.exe
myExcel=NULL; } void MainWindow::saveExcel()
{ QAxObject *myExcel=new QAxObject("Excel.Application");
if(!myExcel){ QMessageBox::critical(this, "错误信息", "EXCEL对象丢失");
return; }
myExcel->dynamicCall("SetVisible(bool)",false);//不显示窗体
myExcel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
QAxObject *workBooks=myExcel->querySubObject("WorkBooks");
workBooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workBook = myExcel->querySubObject("ActiveWorkBook");//获取当前工作簿
QAxObject *workSheets = workBook->querySubObject("Sheets");//获取工作表集合
QAxObject *workSheet = workSheets->querySubObject("Item(int)",);//获取工作表集合的工作表1,即sheet1 for(int i=;i<tempData.count();i++){ QStringList rowData=tempData[i].split(",");\
QAxObject *cellA=workSheet->querySubObject("Range(QVariant, QVariant)","A"+QString::number(i+));
cellA->dynamicCall("SetValue(const QVariant&)",QVariant(rowData[])); QAxObject *cellB=workSheet->querySubObject("Range(QVariant, QVariant)","B"+QString::number(i+));
cellB->dynamicCall("SetValue(const QVariant&)",QVariant(rowData[])); }
QString filePath=excelDir+excelNewName;
qDebug()<<filePath;
//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
workBook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filePath)); workBook->dynamicCall("Close (Boolean)", false);
myExcel->dynamicCall("Quit(void)");
delete myExcel;
myExcel=NULL;
tempData.clear(); } void MainWindow::on_pushButton_clicked()
{
saveExcel();
}
Qt Excel的更多相关文章
- Qt ------ excel 操作
写 excel // step1:连接控件 QAxObject* excel = new QAxObject(this); excel->setControl("Excel.Appli ...
- Qt之操作Excel
Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...
- 38.QT-QAxObject快速写入EXCEL示例
参考链接:https://blog.csdn.net/czyt1988/article/details/52121360 http://blog.sina.com.cn/s/blog_a6fb6cc9 ...
- QT操作EXCEL
介绍一下最基本的QT对EXCEL的读写操作. 声明:转载于:http://blog.csdn.net/czyt1988/article/details/52121360 在使用QT的操作数据库的时候, ...
- Qt QAxObject操作excel文件过程总结(转):
正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...
- Qt 操作Excel
Qt对Excel的数据读/写操作没有现存的类,需要使用QAxObject,下面是从网上下载下来的一个封装好的类,感觉还可以,一般情况下够用,拿来给大家分享. 头文件: #ifndef EXCELENG ...
- Qt将表格table保存为excel(odbc方式)
首先是保存excel的方法,可参照: http://dzmlmszp.blog.163.com/blog/static/179271962014819111812531/ ok,进入正题. 现在我有一 ...
- 在Qt中用QAxObject来操作Excel
目录(?)[+] 下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Pro ...
- qt 操作excel表格
自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...
随机推荐
- NOIP2018普及组模拟赛
向老师给的模拟赛,还没普及组难... 题目在洛谷团队里. 第一试三道水题,我46分钟就打完了,然后就AK了. 第二试一看,除了第二题要思考一段时间之外,还是比较水的,但是我得了Rank倒1,115分. ...
- 拖拽功能by javascript 和 react 两种实现方法
使用鼠标移动图片或者移动图像怪有意思的,那这个移动的效果是怎么实现的呢? 在拖动的过程中,我们会涉及到鼠标向下按,以及移动图形,还有我们松开这几个步骤. 当我们将鼠标向下按的时候,我们鼠标点的这个动作 ...
- 【清北学堂2018-刷题冲刺】Contest 8
Task 1:关联点 [问题描述] ⼆叉树是⼀种常用的数据结构,⼀个⼆叉树或者为空,或者由根节点.左⼦树.右⼦树构成,其中左⼦树和右⼦树都是⼆叉树. 每个节点a 可以存储⼀个值val. 显然,如果 ...
- (string高精度)A + B Problem II hdu1002
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Myeclipse 2017 安装与破解
前言:今天的 Myeclipse 2017 不能用了. 直接找一个教程,破解了,教程的地址如下: http://blog.csdn.net/qingjianduoyun/article/details ...
- Java 搜索引擎
1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...
- Scala进阶之路-反射(reflect)技术详解
Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ...
- 记录一次nginx的upstream的配置信息
nginx的upstream的配置信息 upstream qq.xiaoyu.cn { server 192.168.1.139:80 max_fails=3 fail_timeout=30s; se ...
- Python基础【day02】:数据运算(二)
本节内容 数据运算 表达式while 循环 一.数据运算 算数运算: 比较运算: 赋值运算: 逻辑运算: 成员运算: 身份运算: 位运算: #!/usr/bin/python a = 60 # 60 ...
- 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Address'中的标识列指
在有自增长的SQL表格里面插入指定ID的数据的时候,会禁止你操作,提示如题目,解决办法: set identity_insert address on ,,,) set identity_insert ...