博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt Excel
阅读量:4627 次
发布时间:2019-06-09

本文共 3814 字,大约阅读时间需要 12 分钟。

在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("/")>0)    {        excelDir=fileName.mid(0,fileName.lastIndexOf("/")+1);        excelNewName=fileName.mid(fileName.lastIndexOf("/")+1);        excelNewName=excelNewName.mid(0,excelNewName.lastIndexOf("."))+"_new"+excelNewName.mid(excelNewName.lastIndexOf("."));    }    ui->leSourceExcel->setText(fileName);}QList
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)", 1);//打开第一个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 <
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);//获取工作表集合的工作表1,即sheet1 for(int i=0;i
querySubObject("Range(QVariant, QVariant)","A"+QString::number(i+1)); cellA->dynamicCall("SetValue(const QVariant&)",QVariant(rowData[0])); QAxObject *cellB=workSheet->querySubObject("Range(QVariant, QVariant)","B"+QString::number(i+1)); cellB->dynamicCall("SetValue(const QVariant&)",QVariant(rowData[1])); } QString filePath=excelDir+excelNewName; qDebug()<
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();}

 

转载于:https://www.cnblogs.com/ike_li/p/6269073.html

你可能感兴趣的文章
“cyl projection cannot cross pole” 解决方法
查看>>
[亲测]在Mac下配置php开发环境:Apache+php+MySql
查看>>
mono修改配置
查看>>
Vue 环境搭建(win10)
查看>>
iOS7系统iLEX RAT冬青鼠安装教程:无需刷机还原纯净越狱系统
查看>>
typeof操作符的返回值
查看>>
一个非常简单的 ASP.NET MVC 示例:长轮询(又叫:反向 AJAX,英文名:Comet)实现...
查看>>
ddt 测试用例UI运用
查看>>
01 two sum
查看>>
Media Queries
查看>>
常见的函数式编程模型
查看>>
zip函数的使用
查看>>
C++回溯法走迷宫
查看>>
查看线程的运行状态
查看>>
vault-in-kubernetes
查看>>
RequireJS学习笔记(转)
查看>>
从网站上扒网页,保存为file文件格式
查看>>
ng 过滤器
查看>>
视频剪辑软件调研
查看>>
MYSQL语句
查看>>