方法一:使用第三方库xlsx
优点:可以对复杂的数据进行导出
教程1:
1、源码下载地址:https://github.com/dbzhang800/QtXlsxWriter
2、下载并安装编译时需要的工具 Perl:https://www.perl.org/get.html,根据不同的系统选择不同的perl,对于我们来讲选择activeperl安装包即可。
3、解压QtXlsxWriter-master.zip到E盘根目录下,用Qt 5.9.8 Creator打开E:/QtXlsxWriter-master/src/src.pro。
4、打开xlsxzipreader.cpp文件,定位到51行,把QList 改成 QVector
QVector
保存并构建项目src,这时在E:/QtXlsxWriter-master/lib目录下生成lib文件,在E:/QtXlsxWriter-master/bin目录下生成dll文件,E:/QtXlsxWriter-master/include目录下是一些头文件。
5、拷贝E:/QtXlsxWriter-master/include/QtXlsx目录到Qt的include目录下: C:/Qt/Qt5.9.8/5.9.8/mingw53_32/include(ubuntu18.04的目录为/opt/Qt5.9.8/5.9.8/gcc_64/include)
6、拷贝E:/QtXlsxWriter-master/lib文件夹下Qt5Xlsxd.lib(Qt5Xlsxd.a) Qt5Xlsx.lib(Qt5Xlsx.a) Qt5Xlsx.prl Qt5Xlsxd.prl4个文件到Qt的lib下:C:/Qt/Qt5.9.8/5.9.8/mingw53_32/lib(ubuntu18.04的目录为/opt/Qt5.9.8/5.9.8/gcc_64/lib)
7、拷贝E:/QtXlsxWriter-master/bin文件夹下的Qt5Xlsx.dll Qt5Xlsxd.dll库文件的Qt库路径下C:/Qt/Qt5.9.8/5.9.8/mingw53_32/bin(ubuntu18.04无)
8、拷贝 E:/QtXlsxWriter-master/mkspecs/modules-inst 文件夹下的qt_lib_xlsx.pri和qt_lib_xlsx_private.pri到Qt模块下 C:/Qt/Qt5.9.8/5.9.8/mingw53_32/mkspecs/modules(ubuntu18.04的目录为/opt/Qt5.9.8/5.9.8/gcc_64/mkspecs/modules)
9、拷贝E:/QtXlsxWriter-master/src文件夹到C:/Qt/Qt5.9.8/5.9.8/mingw53_32目录下(ubuntu18.04的目录为/opt/Qt5.9.8/5.9.8/Src)
10、接下来就可以使用Qt进行excel的操作了,只是需要注意:
使用的时候需要包含头文件
#include
using namespace QXlsx;
在你的qmake .pro 需要添加
QT += xlsx
教程2:https://blog.csdn.net/qq_33559992/article/details/85716934
教程3:https://blog.csdn.net/c3060911030/article/details/51560239
示例:
http://qtxlsx.debao.me/qtxlsx-examples.html
Xlsx C ++类:
http://qtxlsx.debao.me/qtxlsx-module.html
方法二:直接导出.csv文件
优点:简单
缺点:不能进行复杂的数据导出
#include <QFile>
#include <QFileDialog>
#define debug qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]" // 调试
void ShowTraceData::shows()
{
// 获取保存文件名
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File")," ",tr("file (*.csv)"));
if (!fileName.isEmpty()) // 判断是否为空
{
QFile file(fileName); // 创建
// 以只写方式打开,若已经有则。
bool ret = file.open( QIODevice::Truncate | QIODevice::WriteOnly);
if(!ret)
return;
// 创建文件流
QTextStream stream(&file);
QString conTents;
QHeaderView * header = ui->tableWidget->horizontalHeader(); // 获取列表头
if (header)
{
conTents = "序号,"; // 开始以序号填充
for ( int i = 0; i < header->count(); i++ )
{
QTableWidgetItem *item = ui->tableWidget->horizontalHeaderItem(i);
if (!item)
{
continue;
}
conTents += item->text() + ",";
}
conTents += "\n";
}
// 行
for ( int i = 0 ; i < ui->tableWidget->rowCount(); i++ )
{
// 行表头
QTableWidgetItem *item = ui->tableWidget->verticalHeaderItem(i); // 获取表头
if(!item)
{
continue;
}
conTents += item->text() + ","; // 添加表头
// 列 内容
for ( int j = 0; j < ui->tableWidget->columnCount(); j++ )
{
QTableWidgetItem* item = ui->tableWidget->item(i, j); // 获取内容
if ( !item )
{
conTents += ",";
continue;
}
QString str = item->text(); // 获取内容
debug << "i" << i << "j" << j << "str" << str;
str.replace(","," ");
conTents += str + ",";
}
conTents += "\n";
}
debug << "conTents:" << conTents;
stream << conTents; // 将内容添加到文件流中
file.close();
}
}
// 导出Excel按钮
void ShowTraceData::on_exportExcel_clicked()
{
shows();
}
方法三:使用Qt自带的库QAxObject
缺点:效率低,且数据多就出错
《Qt5+QAxObject操作Excel》: https://blog.csdn.net/mars_xiaolei/article/details/83410397#comments