最近在做一个项目,客户要求把查询到的数据导出Excel,而网上大部分资料描述的都很局限、很简单。
由于要导出的数据量很大(QTableView中大约有几十万条数据),一开始我是找到一个单元格就写入一个值,但这样的话程序就会把大量的时间花费在线程切换中,导致效率太低(5000行数据大概需要5分钟)。
最后找到了一种方法,即为对Excel进行批量写入值操作,下面是我程序中导出excel部分的源码:
<span style="white-space:pre"> </span>QString strContent;
QAxObject *range;
QList<QVariant> mLstData;
QList<QString> mLstCurData;
int nColumns = 0;
QString strMergeCell;
int nIndex = 0, nTotal = 0; // 记录数据个数
QStringList strListParaName;
QMap<int,PidInfoStruct> mapPidInfo;
//建立Excel对象
HRESULT r = OleInitialize(0);<span style="white-space:pre"> </span>//由于我把导出数据的操作放在了一个新线程中,所以在调用activeX之前要初始化com组件
if (r != S_OK && r != S_FALSE) {
qWarning("Qt: Could not initialize OLE (error %x)", (unsigned int)r);
}
QAxObject *excel