Qt将数据库中的数据导出为html

 更新时间:2024年12月27日 11:09:38   作者:小灰灰搞电子  
这篇文章主要为大家详细介绍了Qt如何实现将数据库中的数据导出为html,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、源码分享

bool ReportFormUtils::exportReportHtml(QString &errString, const QString tableName, const QString savePathAndName, const QString tableTitle, const QString tableInfo)
{
    Q_UNUSED(errString)
    Q_UNUSED(tableName)
    Q_UNUSED(savePathAndName)

#define SINGLE_OPT_ROW 1000
    QString cmd;
    quint32 i,j;
    quint32 row,col;
    bool occerError = false;
    QString fileWriteContent;

    //判断文件是否存在
    QFile file(savePathAndName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        errString = tr("文件打开失败!");
        return false;
    }
    QTextStream out(&file);


    out << QString("<!DOCTYPE html>") << Qt::endl;
    out << QString("<html>") << Qt::endl;
    out << QString("<head>") << Qt::endl;
    out << QString("<meta charset=\"utf-8\">") << Qt::endl;
    out << QString("<title>");
    out << tableTitle << QString("</title>") << Qt::endl;
    out << QString("</head>") << Qt::endl;
    out << QString("<body>") << Qt::endl;
    out << QString(tableInfo) << Qt::endl;
    out << QString("<table border=\"1\">") << Qt::endl;


    SqliteHelper* sqlHelper = SqliteHelper::getInstance();
    QSqlDatabase *db = sqlHelper->getDatabase();

    QSqlQuery sqlQuery(*db);
    QSqlRecord record;
    //开始设置表头
    cmd =QString("select * from %1").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("数据库表头获取失败!");
        occerError = true;
        goto exit;
    }
    record = sqlQuery.record();
    col = record.count();      //获取列数
    //qDebug()<<"col:"<<col;
    //写入表头
    out << QString("<tr>") << Qt::endl;
    for(i=0;i<col;++i)
    {
        out << formatCell(record.fieldName(i)) << Qt::endl;
    }
    out << QString("</tr>") << Qt::endl;


    //获取数据行数
    cmd =QString("SELECT count(*) FROM %1;").arg(tableName);
    sqlQuery.prepare(cmd);
    if(!sqlQuery.exec())
    {
        errString = tr("数据库行数获取失败!");
        occerError = true;
        goto exit;
    }
    sqlQuery.next();
    row = sqlQuery.value(0).toInt();

    //开始导出数据
    for(i =0;i < row; i+=SINGLE_OPT_ROW)
    {
        sqlQuery.clear();
        cmd =QString("select * from %1 limit %2,%3").arg(tableName).arg(i).arg(SINGLE_OPT_ROW);
        //qDebug()<<cmd;
        sqlQuery.prepare(cmd);
        if(!sqlQuery.exec())
        {
            errString = tr("数据库数据获取失败!");
            occerError = true;
            goto exit;
        }
        //读取数据
        while(sqlQuery.next())
        {
            out << QString("<tr>") << Qt::endl;
            for(j=0;j<col;j++)
            {
                out << formatCell(sqlQuery.value(j).toString()) << Qt::endl;
            }
            out << QString("</tr>") << Qt::endl;
        }
    }
    out << QString("</table>") << Qt::endl;
    out << QString("</body>") << Qt::endl;
    out << QString("</html>") <<Qt::endl;
    qDebug()<<"currentThreadId = "<<QThread::currentThreadId();
exit:
    file.close();
    db->close();
    delete db;
    if(occerError)
        return false;

    return true;
}

void ReportFormUtils::castListListVariant2Variant(const QList<QList<QVariant> > &cells, QVariant &res)
{
    QVariantList vars;
    const int rows = cells.size();
    for(int i=0;i<rows;++i)
    {
        vars.append(QVariant(cells[i]));
    }
    res = QVariant(vars);
}

QString ReportFormUtils::formatCell(QString val)
{
    QString outStr = "<td";

    //文本对齐
    outStr += " align=\"";
    outStr += "center";
    outStr += "\"";

    //跨列
    outStr += QString::asprintf(" colspan=\"%d\"", 1);

    //跨行
    outStr += QString::asprintf(" rowspan=\"%d\"", 1);

    //背景色 bgcolor
    outStr += QString::asprintf(" bgcolor=\"#%x\"", 0xcce8cf);

    outStr += ">";

    //内容
    if (val.size()) {
        outStr += val;
    }

    outStr += "</td>";
    return outStr;
}

二、导出文件查看

三、浏览器查看

到此这篇关于Qt将数据库中的数据导出为html的文章就介绍到这了,更多相关Qt数据库数据导出为html内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vs2022启动一个CmakeLists.txt项目的实践

    vs2022启动一个CmakeLists.txt项目的实践

    本文主要介绍了vs2022启动一个CmakeLists.txt项目的实践,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • c++中用TINYXML解析XML文件

    c++中用TINYXML解析XML文件

    这篇文章主要介绍了c++中如何用TINYXML解析XML文件,文中案例非常详细,帮助大家更好的了解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 深入浅析C++的new和delete

    深入浅析C++的new和delete

    new和delete既是C++中的关键字也是一种特殊的运算符。这篇文章主要介绍了C++的new和delete详解,需要的朋友可以参考下
    2018-02-02
  • C语言超详细讲解函数指针的运用

    C语言超详细讲解函数指针的运用

    函数指针是一个指针变量,它可以存储函数的地址,然后使用函数指针,下面这篇文章主要给大家介绍了关于C语言进阶教程之函数指针的相关资料,需要的朋友可以参考下
    2022-06-06
  • C语言实现餐厅管理系统

    C语言实现餐厅管理系统

    这篇文章主要为大家详细介绍了C语言实现餐厅管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++使用链表实现图书管理系统

    C++使用链表实现图书管理系统

    这篇文章主要介绍了C++使用链表实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++中各种初始化方式示例详解

    C++中各种初始化方式示例详解

    这篇文章主要给大家介绍了关于C++中各种初始化方式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • 如何编译libfreetype方法详解

    如何编译libfreetype方法详解

    libfreetype是为跨平台设计的,在windows下要编译的话,可以直接打开目录进行编译,本文将详细介绍libfreetype编译
    2012-11-11
  • C语言数据结构之 折半查找实例详解

    C语言数据结构之 折半查找实例详解

    这篇文章主要介绍了C语言数据结构之 折半查找实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • 浅谈C++11中的几种锁

    浅谈C++11中的几种锁

    本文主要介绍了C++11中的几种锁,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论