之前用的微软com组件生成excel文件,在要求机器长时间运行,记录大量数据保存时,com组件效率极低,3000*20的数据量最后保存时花费了将近5分钟。因而转用xlsx导出excel文件。以下为个人保存时的代码,仅作记录用,作为典型保存代码以防忘记。
void record::on_pushButton_data_save_clicked()//数据导出按钮槽函数
{
//xlsx导出
QXlsx::Document xlsx;
QStringList titleList;
QString filePathName;
QString defaultFileName = "Test.xls";
// 设置保存的默认文件名称
QFileInfo fileinfo(defaultFileName);
// 获取保存文件路径
QFileDialog *fileDlg = new QFileDialog(this);
fileDlg->setWindowTitle("保存文件");
fileDlg->setAcceptMode(QFileDialog::AcceptSave);
fileDlg->selectFile(defaultFileName);
fileDlg->setNameFilter("Excel Files(*.xls *.xlsx)");
fileDlg->setDefaultSuffix("xls");
if (fileDlg->exec() == QDialog::Accepted)//点击保存
{
filePathName = fileDlg->selectedFiles().at(0);
}
// 保存文件添加后缀名
fileinfo = QFileInfo(filePathName);
if (fileinfo.suffix() != "xls" && fileinfo.suffix() != "xlsx")
{
filePathName += ".xls";
}
// 设置excel表头(第一行数据)
titleList <<"信号值1"<<"信号值2"<<"信号值3"<<"信号值4";
// 设置列宽
xlsx.setColumnWidth(1, titleList.size());//第一行,20列宽
for (int i = 0; i < titleList.size(); i++)
{
xlsx.write(1, i+1, titleList.at(i));//这里写第一行,第n列数据
for(int j = 0;j<ui->tableWidget_data->rowCount()-1;j++)
{
if(ui->tableWidget_data->item(j+2,i)!=NULL) xlsx.write(j+2,i+1,ui->tableWidget_data->item(j+2,i)->text());
else xlsx.write(j+2,i+1,"");
}
}
//开始写第n行数据
//xlsx.write(2,1,"Test1");//第二行第一列为Test1
// 最后,保存文件
xlsx.saveAs(filePathName)
}