Qt 导出文件export

解决的问题:

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();
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值