解决的问题:
Qt开发过程中,经常需要进行导出文件的功能,表格导出excel的功能
无论是什么格式,模式都是打开文件,然后写入,然后关闭文件的方式,文件的open write close功能
如何实现:
界面样式,可以导出csv文件,txt 文件,如需要其他文件,可以自定义
表格导出excel的样式
代码块解析:
写csv文件的fuction
bool OutReportUi::exportReportCsvFunc()
{
m_strCurrType = m_pReportTypeCsv->text();
//获取创建的csv文件名
QString fileName = getExportReportPath(m_pSavePathLine->text(),m_pReportNameLine->text(),m_strCurrType.toLower()); /*QFileDialog::getSaveFileName(this, tr("Excel file"), qtApp->applicationDirPath(),tr("Files (*.csv)"));*/
qDebug() << "fileName: " << fileName;
if (fileName.isEmpty())
return false;
//打开.csv文件
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
}
QTextStream out(&file);
out <<"Device ID" << "," << m_pReportParam->deviceID;
out << "\n";
out <<"Run Date/Time" << "," << m_pReportParam->appStartTime;
out << "\n";
out <<"Application Name" << "," << m_pReportParam->appName;
out << "\n";
out <<"Application Version" << "," << m_pReportParam->appVersion;
out << "\n";
out <<"[DETAILS]";
out << "\n";
out << "Date Time Point" <<","
<< "Source Plate Barcode"<<","
<< "Source Well"<<","
<< "Destination Plate Barcode"<<","
<< "Destination Well"<<","
<< "Transfer Volume"<<","
<< "Survey Fluid Volume"<<","
<< "Current Fluid Volume"<<","
<< "Transfer Status";
out << "\n";
for(int i = 0; i < m_pReportParam->mVecModuleReportParam.size(); i++)
{
ModuleReportParam *mp = m_pReportParam->mVecModuleReportParam.at(i);
out << mp->startTimeStr <<","
<< mp->souPlateBard <<","
<< mp->souWell <<","
<< mp->desPlateBard <<","
<< mp->desWell <<","
<< mp->transferVolume <<","
<< QString::number(mp->surveyFluidVolume,'f',2) <<","
<< QString::number(mp->currentFluidVolume,'f',2) <<","
<< mp->transferStatus <<",";
out <<"\n";
}
out << "\n";
//中文字体时候,用tr()方式,无法显示,使用QString::fromLocal18Bit()来显示
QMessageBox::information(this, tr("Export data successfully"), tr("Information is saved in %1 !").arg(fileName), tr("OK"));
file.close();
return true;
}
写txt文件的function
bool OutReportUi::exportOperationReportFunc()
{
m_strCurrType = m_pOperationReport->text();
emit exportOperationSig();
QString fileName = getExportReportPath(m_pSavePathLine->text(),m_pReportNameLine->text(),m_strCurrType.toLower()); /*QFileDialog::getSaveFileName(this, tr("Excel file"), qtApp->applicationDirPath(),tr("Files (*.csv)"));*/
qDebug() << "fileName: " << fileName;
if (fileName.isEmpty())
return false;
//打开.csv文件
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
}
QTextStream out(&file);
out << EchoDeviceData::getInstance().getOtherParam()->strTextReport;
out << "\n";
//中文字体时候,用tr()方式,无法显示,使用QString::fromLocal18Bit()来显示
QMessageBox::information(this, tr("Export data successfully"), tr("Information is saved in %1 !").arg(fileName), tr("OK"));
file.close();
return true;
}
表格导出excel文件的fuction
任何一张表格,都可以用以下的方式导出excel表
void DisplayParamsUi::tableWidgetExportExcel(QTableWidget *table)
{
QString filepath = QFileDialog::getSaveFileName(this, tr("Save as..."),
QString(), tr("EXCEL files (*.xls);;HTML-Files (*.txt);;"));
if (filepath != "")
{
int row = table->rowCount();
int col = table->columnCount();
QList<QString> list;
//添加列标题
QString HeaderRow;
for (int i = 0; i < col; i++)
{
HeaderRow.append(table->horizontalHeaderItem(i)->text() + "\t");
}
list.push_back(HeaderRow);
for (int i = 0; i < row; i++)
{
QString rowStr = "";
for (int j = 0; j < col; j++){
rowStr += table->item(i, j)->text() + "\t";
}
list.push_back(rowStr);
}
QTextEdit textEdit;
for (int i = 0; i < list.size(); i++)
{
textEdit.append(list.at(i));
}
QFile file(filepath);
if (file.open(QFile::WriteOnly | QIODevice::Text))
{
QTextStream ts(&file);
ts.setCodec("GB2312");
ts << textEdit.document()->toPlainText();
file.close();
}
}
}