数据导出到Excel
开发工具与关键技术:Qt Creator、C++
作者:何任贤
撰写时间:2020年05月05日
我们在做项目的时候,经常会有要求把表格数据导出到Excel的要求,我呢,就做了一个列子,这个列子不是导出表格的,我只做了单条数据导出,我们表格跟单条就只有循环的这个差别,单条数据导出比较好讲,会单条导出就等会表格了,所以我这个列子就是单条导出的。
导出Excel需要引入的头文件
#include
//这个头文件是获取当前项目路径用的
#include
而且我们需要在工程文件(.pro)中加上QT+= axcontainer并且右键项目执行qmake。
然后下面是导出Excel的代码
//设置导出路径
QString derivePath = QDir::currentPath() + tr("/test.xlsx");//路径
//创建Excel进程
QAxObject *myExcel = new QAxObject("Excel.Application");
//工作薄集指针
QAxObject *myworks = myExcel->querySubObject("WorkBooks");
//添加一个工作簿
myworks->dynamicCall("Add");
//工作薄指针(获取当前活动的工作簿)
QAxObject *workbook = myExcel->querySubObject("ActiveWorkBook");
//获取电子表格集
QAxObject *mysheets = workbook->querySubObject("WorkSheets");
//添加一个表格
mysheets->dynamicCall("Add");
//获取工作簿中当前活动表格
QAxObject *sheet = workbook->querySubObject("ActiveSheet");
这以上的代码是创建一个虚拟的Excel,并且获取这个虚拟的Excel。这是必须的,别人规定的,大致意思是在内存中创建一个Excel表格,这是有目的的,因为我们都知道内存中交换数据快,更新数据也快。
QString str = neirEdit->text();//内容
int row = hangEdit->text().toInt();//某行
int lie = lieEdit->text().toInt();//某列
QAxObject *pRange = sheet->querySubObject("Cells(int,int)",
row, lie);
pRange->dynamicCall("Value", QVariant(str));
这上面的一段代码则是把数据存进我们创建的虚拟Excel中。
//保存表格
workbook->dynamicCall(“SaveAs(const QString&)”, QDir::toNativeSeparators(derivePath));
这上面的一段代码则是则才是真正的把数据存Excel中。
下面的这些就是把我们创建Excel释放掉。
//关闭工作簿
workbook->dynamicCall("Close(Boolean)",false);
//释放workbook
delete workbook;
workbook = NULL;
//退出进程
myExcel->dynamicCall("Quit(void)");
//释放myExcel
delete myExcel;
myExcel = NULL;
下面是我这个列子的效果图
这是列子的布局。
这是导出到Excel表格中的数据。
我们从上面可以知道Excel的行与列是从1开始的所以我们在写表格循环导出的时候需要注意了。