在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的更多相关文章

  1. Qt ------ excel 操作

    写 excel // step1:连接控件 QAxObject* excel = new QAxObject(this); excel->setControl("Excel.Appli ...

  2. Qt之操作Excel

    Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...

  3. 38.QT-QAxObject快速写入EXCEL示例

    参考链接:https://blog.csdn.net/czyt1988/article/details/52121360 http://blog.sina.com.cn/s/blog_a6fb6cc9 ...

  4. QT操作EXCEL

    介绍一下最基本的QT对EXCEL的读写操作. 声明:转载于:http://blog.csdn.net/czyt1988/article/details/52121360 在使用QT的操作数据库的时候, ...

  5. Qt QAxObject操作excel文件过程总结(转):

    正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

  6. Qt 操作Excel

    Qt对Excel的数据读/写操作没有现存的类,需要使用QAxObject,下面是从网上下载下来的一个封装好的类,感觉还可以,一般情况下够用,拿来给大家分享. 头文件: #ifndef EXCELENG ...

  7. Qt将表格table保存为excel(odbc方式)

    首先是保存excel的方法,可参照: http://dzmlmszp.blog.163.com/blog/static/179271962014819111812531/ ok,进入正题. 现在我有一 ...

  8. 在Qt中用QAxObject来操作Excel

        目录(?)[+]   下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Pro ...

  9. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

随机推荐

  1. Spring Cloud(四) --- config

    Spring Cloud Config 随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的 ...

  2. bzoj3451 Normal

    题意:点分治每次随机选重心,求期望复杂度. 发现一次点分治的复杂度就是点分树上每个节点的子树大小之和.(并没有发现......) 看这个. 注意这个写法有问题,随便来个菊花图就是n2了. 每一层点分治 ...

  3. re正则模块(二十五)

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 r ...

  4. echarts 取消图例上的点击事件和图表上鼠标滑过点击事件

    备注:标黄的代码是起作用的代码,其他的不需要借鉴!!! //取消 鼠标滑过的提示框 tooltip : {         trigger: 'item',      show:false,      ...

  5. gcc/g++

    $gcc -g -Wall -ansi -pedantic main.cpp -lstdc++ -std=c++11 -lpthread -o xmain

  6. Docker mysql主主互备和高可用

    一.测试环境 1.1 结构图 1.2 版本 操作系统:CentOS 7.3 MySQL版本:5.6.35 Docker版本:18.06.1-ce 使用root用户操作 IP地址说明 IP地址 用途 备 ...

  7. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  8. Nginx+Swoole服务器配置

    nginx 配置 server { listen 80; server_name www.swoole.com; root /data/wwwroot/www.swoole.com; location ...

  9. 数据结构(六)查找---多路查找树(B+树)

    前提 下图B树,我们要遍历它,假设每个节点都属于硬盘的不同页面,我们为了中序遍历所有的元素,页面2-页面1-页面3-页面1-页面4-页面1-页面5.而且我们每经过节点遍历时,都会对节点中的元素进行一次 ...

  10. javascript 函数的4种调用模式

    1. 函数模式 // this 指向 window 全局对象 2. 方法模式 // this 指向调用这个方法的对象 3. 构造函数模式 // this 指向 new 新创建出来的实例 4. 上下文模 ...